[英]Trying to understand the following generator in python
我试图了解以下两个代码段之间的区别。 第二个只是打印生成器,而第一个片段将其扩展并迭代生成器。 为什么会发生? 是否因为两个方括号扩展了任何可迭代的对象?
#Code snippet 1
li=[[1,2,3],[4,5,6],[7,8,9]]
for col in range(0,3):
print( [row[col] for row in li] )`
Output:
[1, 4, 7]
[2, 5, 8]
[3, 6, 9]
#Code snippet 2
li=[[1,2,3],[4,5,6],[7,8,9]]
for col in range(0,3):
print( row[col] for row in li )
产量
<generator object <genexpr> at 0x7f1e0aef55c8>
<generator object <genexpr> at 0x7f1e0aef55c8>
<generator object <genexpr> at 0x7f1e0aef55c8>
为什么以上两个引号的输出不同?
print
函数在其参数中输出对象的__str__
方法的返回值。 对于列表, __str__
方法返回一个格式良好的字符串,用方括号括起来,以逗号分隔项目值,但是对于生成器对象, __str__
方法仅返回通用对象信息,从而避免更改生成器的状态。
通过将生成器表达式放在方括号中,您将使用列表推导通过迭代生成器表达式的输出来显式创建列表。 由于这些项目已经产生,因此列表的__str__
方法将毫无问题地返回其值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.