2017-09-02 93 views
-3

我不明白爲什麼for i in gen(100): print(i)正在這裏使用。當我替換print(i)print(gen(i))它開始給予內存位置。我知道產量被用於一次性存儲,但它的工作原理是什麼?爲什麼for循環用於通過函數生成數字?

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) 
+2

可能重複[什麼是「yield」關鍵字?](https://stackoverflow.com/questions/231767/what-does-the-yield-keyword-做) – mx0

回答

1

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) 

爲什麼你從print(gen(i))得到一個內存地址的原因是因爲你實際打印生成的對象,而不是它的價值。所以這就是爲什麼發生器首先必須迭代不知何故