从函数中的记录列表创建Generator对象

时间:2017-11-17 10:11:54

标签: python python-3.x generator

我正在尝试使用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

1 个答案:

答案 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