生成器generator
生成器的特点:
生成器是一个函数,而且函数的参数都会保留。
迭代到下一次的调用时,所使用的参数都是第一次所保留下的,即是说,在整个所有函数调用的参数都是第一次所调用时保留的,而不是新创建的
在Python中,yield就是这样的一个生成器。
每当调用一次迭代器的next函数,生成器函数运行到yield之处,返回yield后面的值且在这个地方暂停,所有的状态都会被保持住,
直到下次next函数被调用,或者碰到异常循环退出。
1.生成器与列表的区别:生成器是只有在调用的时候,才会生产相应的数据。只保留一个值。只能往后走,而且不能迈大步走。这样才能省内存。
2.只有一个next方法。__next__() 前后各两个下划线
[1,3,5,7,8]
3.generator保存的是算法,每次调用next(g),就计算出g的下一个元素的值,直到计算到最后一个元素,没有更多的元素时,抛出StopIteration的错误。
3.yield 的作用就是把一个函数变成一个 generator,带有 yield 的函数不再是一个普通函数,Python 解释器会将其视为一个 generator
4.最难理解的就是generator和函数的执行流程不一样。函数是顺序执行,遇到return语句或者最后一行函数语句就返回。而变成generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。
http://blog.csdn.net/scelong/article/details/6969276
python有两种不同的方式提供生成器:
1.生成器函数:常规函数定义,但是,使用yield语句而不是return语句返回结果。yield语句一次返回一个结果,
在每个结果中间,挂起函数的状态,以便下次从它离开的地方继续执行。
2.生成器表达式:类似于列表推导,但是,生成器返回按需产生结果的一个对象,而不是
一次构建一个结果列表。
生成器的唯一注意事项就是:生成器只能遍历一次。
浙公网安备 33010602011771号