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

Python Generators

Sponsored · SiteGround - Reliable hosting with speed, security, and support you can count on.
Avatar for laike9m laike9m
December 31, 2013

Python Generators

讲述Python生成器的知识

Avatar for laike9m

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