函数中的"yield"语句是什么?

Dew*_*law 16 python

可能重复:
解释了Python yield关键字

有人可以向我解释一下yield语句在这段代码中实际做了什么:

 def fibonacci():
     a, b = 0, 1
     while True:
         yield a
         a, b = b, a+b
Run Code Online (Sandbox Code Playgroud)

for number fibonacci():#使用生成器作为迭代器; 打印号码

到目前为止我所理解的是,我们正在定义一个finonacci()没有参数的函数?在我们定义的函数内部a,b等于0和1,接下来,虽然这是真的,但我们正在屈服a.这到底是做什么的?而且,在屈服的同时aa现在等于b,而b现在等于a + b.

下一个问题,对于数字fibonacci(),是否意味着函数中的每个数字或什么?我同样难以理解产量和"数量"实际上在做什么.显然我知道它对于fibonacci()打印号码中的每个数字都意味着.我是否真的在不知情的情况下定义数字?

谢谢,对不起,如果我不清楚的话.顺便说一句,这是项目欧拉,如果我知道如何编程这将是一件轻而易举的事情,但我正在努力学习这一点.

mon*_*kut 11

使用yield使函数成为生成器.生成器将继续a在每个循环上产生变量,等待直到next()调用生成器的方法继续下一个循环迭代.

或者,直到你return或被StopIteration抚养.

略微修改以显示使用StopIteration:

>>> def fib():
...     a = 0
...     b = 1
...     while True:
...         yield a
...         a = b
...         b += a
...         if a > 100:
...             raise StopIteration
...
>>>
>>> for value in fib():
...     print value
...
0
1
2
4
8
16
32
64
>>>

>>> # assign the resulting object to 'generator'
>>> generator = fib()
>>> generator.next()
0
>>> generator.next()
1
>>> for value in generator:
...     print value
...
2
4
8
16
32
64
>>>
Run Code Online (Sandbox Code Playgroud)

  • 没有必要在生成器内"提升StopIteration" - 只需`return`. (4认同)