01.07 笔记 - 生成器

1. 什么是生成器

  • 生成器就是迭代器,迭代器不一定是生成器

2. 生成器怎么生产元素

  • 调用一个带有yield的关键字的函数就能得到一个生成器

  • 不带yield的函数:调用的时候会执行函数体,并且获取返回值

  • 带yield的函数,调用的时候,不会执行函数体,也不会获取返回值,而是产生一个生成器(函数表达式就是一个生成器)

  • 这个生成器中的元素就是yield关键字后面的值

  • 只要有yield,不管yield出现在哪里,并且是否能执行到,都会将函数变成一个生成器

3. 获取生成器的元素

  • 生成器中的元素也是通过next或者for-in

  • 生成器获取元素,实质就是去执行生成器对应的函数,每次执行到yield为止,并且会将yield后面的值作为当次获取到的元素

  • 下次获取元素的时候,会接着上次结束的位置往后执行,知道下一个yield为止....

  • 以此类推,直到函数结束,如果执行到函数结束没有遇到yield,,那么就会报错

  • 若yield后面还有代码,会继续往后面执行,直到遇到下一个yield,若没有yield,会报错

  • 函数中,有几个yield,就会有几个元素

  • 每次执行都是执行上一个yield到本次yield之间的代码,并返回本次yield的值

4. 什么时候要用生成器

  • 例如产生学号
def func3():
    print('~~~~~')
    yield 100, 200, 300
    print('!!!!!!')
    yield 400
    print('*******')
    yield 500

gen1 = func3() 
print('') 
print(gen1)
print(next(gen1))
print(next(gen1))
print(next(gen1))
print('') 


def creat_num():
    num = 1
    while True:
        yield 'py1809%d' % num
        num += 1

num_gen = creat_num()
for _ in range(10):
    print(next(num_gen))

print(next(num_gen))

def my_iter(iterable):
    for i in iterable:
        yield i


a = my_iter([1, 2, 3])
print(next(a))
print(next(a))
print(next(a))

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容