python基础-生成器

148 阅读1分钟
"""
生成器的本质就是迭代器,在处理大数据量时可以分批处理,优化内存
创建方式:
1.生成器函数:yield
2.生成器表达式:(数据 for循环 if判断(如果需要)

生成器执行的时候不会执行函数,得到的是生成器。

yield:只要函数中出现了这个关键字,该函数就是生成器
作用:
1.可以返回值
2.可以分段执行函数
"""


def func():
    print(123)
    yield 999
    print(456)
    yield 888


fn = func()
print(fn)  # <generator object func at 0x11034ef90>
res = fn.__next__()  # 123,只有执行next的时候才会获取到返回值
print(res)  # 999
res = fn.__next__()  # 456
print(res)  # 888

# fn.__next__()  # StopIteration 只有一个yield


gen = (i for i in range(10) if i % 2 == 0)
print(gen)  # <generator object <genexpr> at 0x108497f90>
# print(gen.__next__())  # 0
# print(gen.__next__())  # 2
for item in gen:
    print(item)


# ============== demo ====================
def order():
    lst = []
    for i in range(10000):
        lst.append(f'数据{i}')
        if len(lst) == 10:
            yield lst
            lst = []


data = order()
print(data.__next__())  # ['数据0', '数据1', '数据2', '数据3', '数据4', '数据5', '数据6', '数据7', '数据8', '数据9']
print(data.__next__())  # ['数据10', '数据11', '数据12', '数据13', '数据14', '数据15', '数据16', '数据17', '数据18', '数据19']