Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Python Generators

laike9m
December 31, 2013

Python Generators

讲述Python生成器的知识

laike9m

December 31, 2013
Tweet

More Decks by laike9m

Other Decks in Programming

Transcript

  1. >>> def gen_ab(): ... print('starting...') ... yield 'A' ... print('here

    comes B:') ... yield 'B' ... print('the end.') g = gen_ab(), 停在这里 第一次调用next(), 停在这里 第二次调用next(), 停在这里 生成器函数可以看成一串事件,yield暂停执行,next恢复执行 “yield 是 具有 暂停功能 的 return”
  2. • 循环就是一个事件流,只不过里面 包含了一些条件判断 def fib(max): a, b = 0, 1

    while a < max: yield a a, b = b, a+b 等价于 def fib(max): a, b = 0, 1 if a < max: yield a a, b = b, a+b if a < max: yield a a, b = b, a+b if a < max: yield a a, b = b, a+b ...
  3. • 有yield的函数:生成器函数 • yied是带暂停功能的return • for, list 本质上是在调用next(obj) • 把生成器函数看成事件流,yield暂停,next继续执行

    • 生成器函数内部通常包含循环,循环也是事件流 • 把列表解析的中括号换成小括号就是生成器表达式
  4. Q&A