1. 存在即合理

1. 生成器

  1. 生成器是迭代器的一种实现,它是为了让python更加简洁,因为迭代器需要我们自己去定义一个类和实现相关的方法,而生成器则只需要在普通的函数中加一个yield语句即可。
  2. 简单地讲,yield 的作用就是把一个函数变成一个 generator,带有 yield 的函数不再是一个普通函数,Python 解释器会将其视为一个 generator。

2. 协同程序

  1. 生成器的发明使得python模仿协同程序的概念得以实现。所谓协同程序就是可以运行的独立函数调用,函数可以暂停或者挂起,并在需要的时候从程序离开的地方继续或者重新开始。
  2. 对于调用一个普通的Python函数,一般是从函数的第一行代码开始执行,结束于return语句、异常或者函数所有语句执行完毕。一旦函数将控制权交给调用者,就意味着全部结束。函数中的所有工作以及保存在局部变量中的数据都将丢失。再次调用这个函数都将从头创建。
  3. Python是通过生成器来实现类似于协同程序的概念:生成器可以暂时挂起函数,并保留函数的局部变量等数据,然后再次调用时,从上次暂停的位置继续执行下去。

2. 示例

  1. 示例1
    26 生成器
    当函数结束时,一个StopIteration异常会被抛出
  2. 示例2
    有python中for循环会自动调用next()方法和处理StopIteration异常,所有for循环也是可以对生成器产生作用
    26 生成器
  3. 示例3
def fibs():
    a = 0
    b = 1
    while True:
        a,b = b,a+b
        yield a

for each in fibs():
    if each > 20:
        break
    print(each)

调用 fabs() 不会执行 fab 函数,而是返回一个 iterable 对象!
在 for 循环执行时,每次循环都会执行 fabs()函数内部的代码,执行到 yield a时,fab 函数就返回一个迭代值。
下次迭代时,代码从 yield a 的下一条语句继续执行,而函数的本地变量看起来和上次中断执行前是完全一样的,于是函数继续执行,直到再次遇到 yield。
26 生成器

相关文章:

  • 2022-01-17
  • 2021-11-17
猜你喜欢
  • 2022-01-13
  • 2021-08-10
  • 2022-01-03
  • 2021-12-07
  • 2021-04-17
  • 2022-02-19
  • 2021-12-31
相关资源
相似解决方案