MegaMU个人站

欢迎光临

落日黄沙 白帆秋水 你可知谁的记忆在时空里飞?


生成器

目录

生成器类似于返回值为数组的一个函数,这个函数可以接受参数,可以被调用,但是,不同于一般的函数会一次性返回包括了所有数值的数组,生成器一次只能产生一个值,这样消耗的内存数量将大大减小,而且允许调用函数可以很快的处理前几个返回值,因此生成器看起来像是一个函数,但是表现得却像是迭代器。

创建生成器

  • 使用类似列表生成器的方法
    data——list1 = (x*x for i in range(10))
    print(data_list1)
    

    我们发现,它返回了一个<generator object <...> at 0x...>对象。我们试着遍历一下它

    for i in data_list:
        print(i)
    

    它是可以正常输出的!我们可以用next()来获取它的下一个值。

  • 在函数中使用yield
    def test1():
    	yield 10
    a = test1()
    print(a)
    

    它也返回了一个<generator object <...> at 0x...>对象!a是一个生成器对象

    我们使用next(a)就可以得到10了。


在生成器中yield充当return返回值的作用,它能保存生成器运行状态,并暂停执行,当next时,从yield位置继续执行。

可以使用生成器.send()启动生成器并传递参数,参数会传给n = yield ...中的n

生成器除非不能继续执行,不会自动结束,需要使用return来StopIteration,返回的异常信息就是return的内容。

打赏一个呗

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦