我正在尝试使用mysql数据库中的数据为记录列表创建生成器对象,所以我将mysql游标对象作为参数传递给函数。
我的问题是,如果包含产量记录的“if block”被评论,那么cust_records函数完全正常,但如果我取消注释该行,则该函数无效。
不确定这不是在Python 3中产生列表对象的方法
到目前为止我的代码:
def cust_records(result_set) :
block_id = None
records = []
i = 0
for row in result_set :
records.append((row['id'], row, smaller_ids))
if records :
yield records
答案 0 :(得分:3)
生成器的重点是延迟评估,因此将所有记录存储在列表中并产生列表根本就没有意义。如果你想保留懒惰的评估(这是恕我直言,特别是如果你必须处理可能变得很大的任意数据集),你想要产生每条记录,即:
def cust_records(result_set) :
for row in result_set :
yield (row['id'], row, smaller_ids)
# then
def example():
cursor.execute(<your_sql_query_here>)
for record in cust_records(cursor):
print(record)
else(如果你真的想要消耗尽可能多的内存)只是男性cust_record
一个简单的函数:
def cust_records(result_set) :
records = []
for row in result_set :
records.append((row['id'], row, smaller_ids))
return records