以前只是类似生成器表达式那样使用...
其实有N多牛B用法.
真长见识~!
http://www.dabeaz.com/coroutines/index.html
例如:
# grep.py
#
# A very simple coroutine
def grep(pattern):
print "Looking for %s" % pattern
while True:
line = (yield)
if pattern in line:
print line,
# Example use
if __name__ == '__main__':
g = grep("python")
g.next()
g.send("Yeah, but no, but yeah, but no")
g.send("A series of tubes")
g.send("python generators rock!")
对于生成器函数来说, 有
next() ,
send(),
throw() 方法.
- next() 比较容易理解.
- send(arg) 向生成器发送参数, 会被 line = (yield) 捕获.
- throw(typ[,val[,tb]]) -> raise exception in generator, return next yielded value or raise StopIteration. 参数分别是, 异常类型, 异常 str, traceback object.
这算是最简单的....
配合函数修饰符, 相当强大....
yield ...
1 条评论:
长见识,比ruby的那个callcc好看多了
发表评论