- 论坛徽章:
- 0
|
原帖由 win_hate 于 2009-3-27 00:11 发表 ![]()
楼主不如先介绍一下 Python 中的 generator? 懂 lazy 影子的人不一定懂 Python 啊。
虽然学习 python 不精,但愿抛砖引玉,如果有哪些不对,还望指正,改之
python generator:
在 python 中,generator function 是一个可以保存状态的函数,用 yield 指令(不是 return )返回一个值,保存当前整个函数执行状态,等待下一次调用,
当需要该函数返回值时,该 generator function 恢复整个函数执行状态,直至再次遇到 yield 指令,再次返回一个值,再次保存当前函数执行状态,再次等待。
如此循环往复,直至函数末尾,发生 StopIteration 异常。
generator 利用 next() method 来获取 generator 的下一个返回值。这样,generator在需要返回中间值时,
调用 next() method,获取 generator 的下一个返回值,保存当前函数状态,等待下一次的返回要求。
先看一个例子吧:
- >>> def num_gen(n):
- ... for i in range(n):
- ... yield i*2
- ...
- >>> g = num_gen(6)
- >>> g
- <generator object at 0xb806f76c>
- >>> g.next()
- 0
- >>> g.next()
- 2
- >>> g.next()
- 4
- >>> g.next()
- 6
- >>> g.next()
- 8
- >>> g.next()
- 10
- >>> g.next()
- Traceback (most recent call last):
- File "<stdin>", line 1, in <module>
- StopIteration
复制代码
函数里只要有了yield,这个函数就会被编译成一个 generator 函数,以上定义的 num_gen 函数就是一个 generator function,
num_gen(6) 返回一个 generator object,赋值于 g, 当 g 对象调用 next() 时,返回该 generator 的下一个值
!也就是说:当我们需要 generator 的返回值时,调用 next() 就可以了,
只有需要时,才会调用函数,取得返回值
好像有一点 lazy |
|