"for i in generator():" 是做什么的?
What does "for i in generator():" do?
谁能解释一下每一步的作用?
我从未见过 "for i 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)
for
刚好超过表达式的值。如果表达式调用一个函数,那么它的值就是函数返回的任何值,因此 for 范围超过该函数的结果。
注意,这里的fib
虽然不是一个函数,但它是一个生成器。它连续产生每个步骤的值。
任何包含 yield
will return a generator 的函数。生成器 return 的 for 循环 运行 一次一个值。
当你运行:
for i in fib():
print(i)
运行发电机的实际机制是:
_iterator = iter(fib())
while True:
try:
i = next(_iterator)
except StopIteration:
break
print(i)
如你所见,i 变量被赋值为在生成器上调用 next() 以获取下一个值的结果.
希望能说明 i 的来源:-)
要理解这一点,您必须了解 yield
关键字的作用。请看这个:What yield does?
现在您知道 fib()
不是函数,而是生成器。
所以在代码中:
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
永远不会得到错误的值。它保持 运行.
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.
谁能解释一下每一步的作用?
我从未见过 "for i 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)
for
刚好超过表达式的值。如果表达式调用一个函数,那么它的值就是函数返回的任何值,因此 for 范围超过该函数的结果。
注意,这里的fib
虽然不是一个函数,但它是一个生成器。它连续产生每个步骤的值。
任何包含 yield
will return a generator 的函数。生成器 return 的 for 循环 运行 一次一个值。
当你运行:
for i in fib():
print(i)
运行发电机的实际机制是:
_iterator = iter(fib())
while True:
try:
i = next(_iterator)
except StopIteration:
break
print(i)
如你所见,i 变量被赋值为在生成器上调用 next() 以获取下一个值的结果.
希望能说明 i 的来源:-)
要理解这一点,您必须了解 yield
关键字的作用。请看这个:What yield does?
现在您知道 fib()
不是函数,而是生成器。
所以在代码中:
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
永远不会得到错误的值。它保持 运行.
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.