2017-08-10 42 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