当我打印列表时,使用此方法时出现语法错误:
print i for i in [1,2,3]
我知道这是确定使用这种方法时:
for i in [1, 2, 3]:
print i
我知道
(i for i in [1, 2, 3])
是一个生成器对象,但我只是不明白为什么
print i for i in [1, 2, 3]
不起作用。有人能给我一个线索吗?
列表理解语法x for x in ...
需要括号。这是 Pytn 的语法规则,就像要求缩进或在if
之后要求冒号一样。i for i in [1, 2, 3]
本身不是有效的语法。您需要[i for i in [1, 2, 3]]
(用于列表理解)或(i for i in [1, 2, 3])
(用于生成器理解)。
在 Pytn 2 中,print
是语句,而不是表达式或函数,因此您不能直接在理解中使用它。
def f(x): print x
[f(i) for i in [1,2,3]]
请注意,(f(i)...)
不起作用,因为这只是创建一个生成器,如果您迭代它,它将调用f()
。列表理解[]
实际上调用f()
。
[EDIT]如果您使用 Pytn & gt;2.6,则可以使用
from __future__ import print_function
[print(i) for i in [1, 2, 3]]
注意print
参数周围的()
。
列表理解语法 ([expression for loop]
) 是生成列表的速记循环语法。
由于您没有生成 pytn 列表,因此您必须使用常规循环。
或者,由于您所做的只是在单独的行上打印项目,只需自己添加换行符:
print '\n'.join(i for i in [1, 2, 3])
这会产生相同的输出:
for i in [1, 2, 3]:
print i
如果您使用 Pytn 3,或者在模块顶部使用from __future__ import print
,然后使用print()
函数,则可以在一次调用中将所有值发送到该函数,并告诉print()
在两者之间使用换行符:
values = [1, 2, 3]
print(*values, sep="\n")
作为expression
(在语法中):
[i for i in [1, 2, 3]]
是一个列表理解。
(i for i in [1, 2, 3])
是一个生成器表达式。
但是i for i in [1, 2, 3]
本身就是一个语法错误,这就是它的方式。它周围一定有一些东西。除非你有(
或[
,否则它不是一个有效的expression
,因为for
关键字在这一点上是无效的。
在print statement里面,它想要一个expression
。
(作为一个红鲱鱼,func(i for i in [1, 2, 3])
被允许作为一个表达式,是一个函数调用,第一个参数是一个生成器表达式。)
本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处
评论列表(56条)