我无法理解为什么for i in gen(100): print(i)
在这里被使用。当我用print(i)
替换print(gen(i))
时,它开始提供内存位置。我知道产量用于一次性存储,但它究竟是如何工作的?
def gen(num):
i = 0
while i<num:
x=i
i+=1
if x%7 == 0:
yield x
for i in gen(100):
print(i)
答案 0 :(得分:1)
salary
5000
6000
不用于一次性存储。 yield
使函数返回生成器
生成器是一个可迭代的对象(这意味着您可以使用它来代替yield
,list(gen())
等任何序列。您还可以将其传递给for i in gen()
内置函数,该函数将生成器向前推进一步(使其开始或从它停止的位置开始并运行到它命中的第一个next()
)。它还返回产生的值
yield
您从def gen():
for i in range(5):
yield i
print(list(gen())) # prints [0, 1, 2, 3, 4]
print(next(gen())) # prints 0
gn = gen()
print(next(gn)) # prints 0
print(list(gn)) # prints [1, 2, 3, 4]
print(next(gn)) # raises StopIteration, because the generator is
# exhausted (the generator function ran to completion)
获取内存地址的原因是因为您实际上是在打印生成器对象,而不是它生成的值。所以这就是为什么生成器首先必须以某种方式迭代