“对于我在发电机()中:”做什么?
这个问题在这里已经有了答案:
for loop
生成一次性变量,如果您像上面一样使用它。 例如,一个list object
在循环中一次又一次地被使用,但是一次性迭代器在使用后被自动删除。
yield
是一个像return
这样的用于函数的术语。 它会给出结果并在循环中再次使用它。 你的代码给你称为斐波纳契数字。
def fib():
a, b = 0,1 #initially a=0 and b=1
while True: #infinite loop term.
yield b #generate b and use it again.
a,b = b, a + b #a and b are now own their new values.
for i in fib(): #generate i using fib() function. i equals to b also thanks to yield term.
print(i) #i think you known this
if i>100:
break #we have to stop loop because of yield.
任何包含yield
函数都会返回一个生成器。 for循环运行该生成器以一次返回一个值。
当你运行:
for i in fib():
print(i)
运行发电机的实际机制是:
_iterator = iter(fib())
while True:
try:
i = next(_iterator)
except StopIteration:
break
print(i)
正如你所看到的,i变量被分配了调用生成器的next()以获得下一个值的结果。
希望能够清楚说明我来自哪里:-)
for
刚刚超过范围的表达式的vaue。 如果表达式调用一个函数,那么它的值就是函数返回的任何值,所以函数的结果范围为。
请注意,虽然fib
不是函数,但它是一个生成器。 它先后产生每一步的价值。