2017-08-10 67 views
0

是否有人可以向我解釋爲什麼在「with」和「without」之間打印我的序列代碼時出現差異for loop?發電機 - 打印生成的值

def generation(x): 
    i = 0 
    while i < x: 
     yield i 
     i += 1 

x = generation(10) 
print("Print without for loop: " + str(x)) 

print("Print with for loop: ") 
for j in x: 
    print(j) 
+0

生成器基本上是惰性迭代器。 – erip

+1

嘗試'print(「打印沒有for循環:」,* x)' –

+0

請參閱https://stackoverflow.com/questions/1756096/understanding-generators-in-python –

回答

1

你的第一個print打印發電機對象。你的第二個print調用生成器,遍歷所生成的值。

這很像打印函數對象(句柄)的值和調用函數之間的區別。

我認爲你可能會誤解你的第一個print的語義。要獲得這種形式的整數列表,您需要通過生成器迭代的東西:

print("Print as list") 
print (list(generation(10))) 
+0

只是'列表(代(10))'工程。不需要列表理解。 – Blckknght

+0

好點。我試圖平行OP的使用。現在我已經看到了它,「list」操作更好。答案已升級。 – Prune