Reference
结果:
N = [1, 2, 3]
print(n for n in N)
为什么此代码无法打印:
<generator object <genexpr> at 0x000000000108E780>
然而代码:
1
2
3
可以总结N中的所有数字。
你能否告诉我为什么sum()可以工作但print()faild?
答案 0 :(得分:7)
这是因为您将生成器传递给函数,并且该生成器返回的__repr__
方法是什么。如果要打印它将生成的内容,可以使用:
print(*N, sep='\n') # * will unpack the list
或
print(*(n for n in N), sep='\n') # Again, unpacks values
或
print('\n'.join(map(str, n for n in N)))
或者如果你喜欢理解:
[print(n) for n in N]
您必须知道最后一个方法构造了一个填充了None
的列表。
答案 1 :(得分:1)
您实际上是在打印生成器对象表示
如果您想在一行上,请尝试打印列表
public ConsumerRecords<K,V> poll(long timeout)
这只是print([n for n in N])
如果您想要一个行分隔的字符串,请打印
print(N)
或者写一个常规循环,不要微观优化代码行
答案 2 :(得分:1)
如果您不想将其作为列表投射,可以尝试:
print(*(n for n in N))
请参阅:https://docs.python.org/3/tutorial/controlflow.html#tut-unpacking-arguments
答案 3 :(得分:-1)
def genfun():
yield ‘A’
yield ‘B’
yield ‘C’
g=genfun()
print(next(g))= it will print 0th index .
print(next(g))= it will print 1st index.
print(next(g))= it will print 2nd index.
print(next(g))= it will print 3rd index But here in this case it will give Error as 3rd element is not there
So , prevent from this error we will use for loop as below .
for i in g :
print(i)