生成器(generator)

一、生成器的概念

生成器其实是一种特殊的迭代器,不过这种迭代器更加优雅。它不需要再像上面的类一样写__iter__()__next__()方法了, 只需要一个yiled关键字。 生成器一定是迭代器(反之不成立)

二、定义一个生成器

函数执行过程中遇到yield就会停止继续往下执行并且会记住当前执行的位置,等到下一次执行的时候继续往下执行

  • 1、定义一个迭代器函数

    def foo():
        print('---第一个值---')
        yield 1
        print('---第二个值---')
        yield 2
        print('---第三个值---')
        yield 3
        print('---第四个值---')
        yield 4
        print('---第五个值---')
        yield 5
    
  • 2、使用

    if __name__ == '__main__':
        f = foo()
        # 查询类型是一个generator的类
        print(type(f))
        # 打印出来的仅仅是一个generator的内存地址
        print(f)
        # 打印值(下面两种方式随便那种)
        print(f.__next__())
        print(next(f))
    

三、迭代器的协程

所谓的协程就是,从外面可以发送参数给生成器(generator中)

  • 1、实现代码

    def foo():
        list1 = []
        while True:
            s1 = yield list1
            print('第一个参数:{0}'.format(s1))
            list1.append(s1)
            print(list1)
    
    if __name__ == "__main__":
        f = foo()
        print(f.send(None))
        f.send('你好')
        f.send('hello')
    
  • 解说
    • 1.对于表达式形式的yield,在使用时,第一次必须传None,f.send(None)等同于next(f)

results matching ""

    No results matching ""