|
遇到复杂数据处理逻辑,想到可以使用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,明确函数代码职责,代码更优雅,可以遍历“迭代器函数”后进行逻辑处理,而不是遍历函数的同时做逻辑处理
- '''
复制代码
来源:https://www.cnblogs.com/wy123/p/17029738.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作! |
|