为什么for循环用于通过函数生成数字?

时间:2017-09-02 14:00:29

标签: python-3.x

我无法理解为什么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)

1 个答案:

答案 0 :(得分:1)

salary 5000 6000 不用于一次性存储。 yield使函数返回生成器

生成器是一个可迭代的对象(这意味着您可以使用它来代替yieldlist(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) 获取内存地址的原因是因为您实际上是在打印生成器对象,而不是它生成的值。所以这就是为什么生成器首先必须以某种方式迭代