有人可以解释一下这里的每一步吗?
我从来没有见过“for in in X:”,其中X是一个生成器,如果它没有被插入()之间,我无法理解i如何与函数交互。
def fib():
a, b = 0,1
while True:
yield b
a,b = b, a + b
for i in fib():
print(i)
答案 0 :(得分:2)
for
只是表达式的范围。如果表达式调用一个函数,那么它的值是函数返回的值,因此for函数的结果范围就是。
请注意,虽然fib
不是函数,但它是一个生成器。它连续产生了每一步的价值。
答案 1 :(得分:2)
任何包含yield
的函数都会返回generator。 for循环运行该生成器一次返回一个值。
当你跑步时:
for i in fib():
print(i)
运行发电机的实际机制是:
_iterator = iter(fib())
while True:
try:
i = next(_iterator)
except StopIteration:
break
print(i)
如您所见, i 变量被赋予在生成器上调用 next()的结果以获取下一个值。
希望能明确 i 的来源: - )
答案 2 :(得分:1)
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.
答案 3 :(得分:0)
要理解这一点,您必须了解fib()
关键字的作用。请看一下:reference
现在你知道def fib():
a, b = 0,1
while True:
yield b #from here value of b gets returned to the for statement
a,b = b, a + b
for i in fib():
print(i)
不是一个函数,它是一个生成器。
所以在代码中:
While
由于{{1}}永远不会获得错误值。它一直在运行。