在Python中,这种一边循环一边计算的机制,称为生成器:generator。 生成器保存的是算法,每次调用 next() ,就计算出 下一个元素的值,直到计算到最后一个元素,没有更多的元素时,抛出 StopIteration 的异常当然,这种不断调用 next() 实在是太变态了,正确的方法是使用 for 循环,因为生成器也是可迭代对象。所以,我们创建了一个生成器后,基本上永远不会调用 next() ,而是通过 for 循环来迭代它,并且不需要关心 StopIteration 异常。 创建生成器的方法:1、只要把一个列表生成时的[]改为()2、定义generator的另一种方法。如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator 用for循环调用generator时,发现拿不到generator的return语句的返回值。如果想要拿到返回值,必须捕获StopIteration错误,返回值包含在StopIteration的value中while True: try: x = next(g) print("value:%d"%x) except StopIteration as e: print("生成器返回值:%s"%e.value) break 生成器是这样一个函数,它记住上一次返回时在函数体中的位置。对生成器函数的第二次(或第 n 次)调用跳转至该函数中间,而上次调用的所有局部变量都保持不变。生成器不仅“记住”了它数据状态;生成器还“记住”了它在流控制构造(在命令式编程中,这种构造不只是数据值)中的位置。 生成器的特点:1、节约内存2、迭代到下一次的调用时,所使用的参数都是第一次所保留下的, 即是说,在整个所有函数调用的参数都是第一次所调用时保留的,而不是新创建的
时间: 2024-10-17 22:35:58