列表理解:为什么这是语法错误?

mon*_*nny 47 python list-comprehension python-2.6

为什么在以下列表理解中print(x)这里不是有效的(SyntaxError)?

my_list=[1,2,3]
[print(my_item) for my_item in my_list]
Run Code Online (Sandbox Code Playgroud)

为了对比 - 以下不会给出语法错误:

def my_func(x):
    print(x)
[my_func(my_item) for my_item in my_list]
Run Code Online (Sandbox Code Playgroud)

Len*_*bro 61

因为print不是一个函数,所以它是一个声明,你不能在表达式中使用它们.如果使用普通的Python 2语法,这会变得更加明显:

my_list=[1,2,3]
[print my_item for my_item in my_list]
Run Code Online (Sandbox Code Playgroud)

这看起来不太合适.:) my_item周围的括号内容欺骗了你.

这在Python 3,btw中有所改变,其中print 一个函数,你的代码工作得很好.

  • 您可以从以后导入此功能:`from __future__ import print_function` (23认同)

Ish*_*are 9

list comprehension旨在创建一个列表.所以在里面使用print会产生错误,无论我们使用print()还是在2.7或3.x中打印.代码

[my_item for my_item in my_list] 
Run Code Online (Sandbox Code Playgroud)

创建一个类型列表的新对象.

print [my_item for my_item in my_list]
Run Code Online (Sandbox Code Playgroud)

打印出这个新列表作为一个整体

参考:这里

  • *"无论我们使用print()还是在2.7或3.x中打印"*这只适用于python 2.x,而不是python 3.x. `[print(char)for char in"abc"]`在python 3.x中有效(但不鼓励) (3认同)

Tho*_*ers 7

这是一个语法错误,因为print它不是一个函数.这是一个声明.既然你显然不关心返回值print(因为它没有),只需编写正常循环:

for my_item in my_list:
    print my_item
Run Code Online (Sandbox Code Playgroud)