翼度科技»论坛 编程开发 python 查看内容

Python中的yield迭代器使用

6

主题

6

帖子

18

积分

新手上路

Rank: 1

积分
18
遇到复杂数据处理逻辑,想到可以使用Python的yield迭代器可以优雅地实现,切实体验到了迭代器的好处,多数情况下,代码不够优雅,也别是多层循环嵌套的,都可以常使用迭代器重构。
1,减少内存的占用,正如yield的经典用途,不必把所需的数据一次性生成到内存中,可以分批生成
2,明确函数代码职责,代码更优雅,可以遍历“迭代器函数”后进行逻辑处理,而不是原函数内部做逻辑处理
  1. # 迭代器返回部分结果
  2. def get_data_from_mysql(batch_size):
  3.     target_conn = {'host': '***.***.***.***', 'database': 'db01', 'port': 8000, 'user': 'root', 'password': '***'}
  4.     var_list = []
  5.     with pymysql.connect(**target_conn) as conn:
  6.         with conn.cursor() as cursor:
  7.             cursor.execute("SELECT * FROM test_table LIMIT 100;")
  8.             for row in cursor:
  9.                 var_list.append(row)
  10.                 if len(var_list) == batch_size:
  11.                     yield var_list
  12.                     var_list.clear()
  13. # 遍历迭代器进行逻辑处理
  14. def do_business_process():
  15.     var_batch_size = 10
  16.     for var_list in get_data_from_mysql(var_batch_size):
  17.         print(var_list)
  18.         print('do something complicated business for var list')
  19. if __name__ == "__main__":
  20.     do_business_process()
  21. '''
  22. 1,减少内存的占用,正如yield的经典用途,不必把所需的数据一次性生成到内存中,可以分批生成
  23. 2,明确函数代码职责,代码更优雅,可以遍历“迭代器函数”后进行逻辑处理,而不是遍历函数的同时做逻辑处理
  24. '''
复制代码
 

来源:https://www.cnblogs.com/wy123/p/17029738.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具