Python中使用yield实现迭代器
遇到复杂数据处理逻辑,想到可以使用Python的yield迭代器可以优雅地实现,切实体验到了迭代器的好处,多数情况下,代码不够优雅,特别是多层循环嵌套的,都可以常使用迭代器重构。
1,减少内存的占用,正如yield的经典用途,不必把所需的数据一次性生成到内存中,可以分批生成
2,明确函数职责,代码更优雅,可以遍历“迭代器函数”后进行逻辑处理,而不是原函数内部做逻辑处理
# 迭代器返回部分结果
def get_data_from_mysql(batch_size):
target_conn = {'host': '***.***.***.***', 'database': 'db01', 'port': 8000, 'user': 'root', 'password': '***'}
var_list = []
with pymysql.connect(**target_conn) as conn:
with conn.cursor() as cursor:
cursor.execute("SELECT * FROM test_table LIMIT 100;")
for row in cursor:
var_list.append(row)
if len(var_list) == batch_size:
yield var_list
var_list.clear()
# 遍历迭代器进行逻辑处理
def do_business_process():
var_batch_size = 10
for var_list in get_data_from_mysql(var_batch_size):
print(var_list)
print('do something complicated business for var list')
if __name__ == "__main__":
do_business_process()
'''
1,减少内存的占用,正如yield的经典用途,不必把所需的数据一次性生成到内存中,可以分批生成
2,明确函数代码职责,代码更优雅,可以遍历“迭代器函数”后进行逻辑处理,而不是遍历函数的同时做逻辑处理
'''
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
2020-01-06 Redis主从结构主节点执行写入后wait命令对性能的影响