生成器

在python社区,普遍认为生成器的本质就是迭代器。唯一的区别:生成器是自己用python代码构建的数据结构;而迭代器都是通过提供、转化得到的

获取生成器的三种方式:1.生成器函数  2. 生成器表达式  3.python内部提供

1.生成器函数

def func():
    print(111)
    print(222)
    yield 3
    yield 4

ret = func()  # 返回一个生成器对象
print(ret)
print(next(ret)) # 通过next(生成器对象)从上到下依次取yiled对应的值,一个next对应一个yield
print(next(ret)) # yield不会使整个函数结束
def gen_func():
    for i in range(1, 5001):
        yield f'{i}号包子'

ret = gen_func()
for i in range(200):
    print(next(ret))

for i  in range(200):  # next()在整个程序结束前会记住其当前的位置
    print(next(ret))
# yield from  优化内层循环,提高效率
def func1():
    l1 = [1, 2, 3, 4, 5]
    yield from l1   # 将l1这个列表变成了迭代器返回其中的每一个元素
    """
    yield from l1 的等价如下

    yield 1
    yield 2
    yield 3
    yield 4
    yield 5
    """

ret = func1()
print(next(ret))
print(next(ret))

def func2():
    l1 = ['卫龙', '老冰棍', '北冰洋', '牛羊配']
    l2 = ['馒头', '花卷', '豆包', '大饼']

    yield from l1
    yield from l2

g = func2()  # 生成器对象

"""
for i in range(8):
    print(next(g))
"""

for i in g:
    print(i)

2. 生成器表达式 

obj = (i for i in range(1, 11)) # 生成器表达式
for i in obj:
    print(i)

 

posted @ 2020-08-19 11:24  LGQ天  阅读(93)  评论(0)    收藏  举报