Понимание списка: почему это синтаксическая ошибка? - PullRequest
47 голосов
/ 26 января 2010

Почему print(x) здесь недопустимо (SyntaxError) в следующем понимании списка?

my_list=[1,2,3]
[print(my_item) for my_item in my_list]

Для сравнения - следующее не дает синтаксической ошибки:

def my_func(x):
    print(x)
[my_func(my_item) for my_item in my_list]

Ответы [ 4 ]

60 голосов
/ 26 января 2010

Поскольку print - это не функция, это утверждение, и вы не можете иметь их в выражениях.Это становится более очевидным, если вы используете обычный синтаксис Python 2:

my_list=[1,2,3]
[print my_item for my_item in my_list]

Это выглядит не совсем правильно.:) Скобки вокруг my_item обманывают вас.

Это изменилось в Python 3, кстати, где print - это функция, где ваш код работает очень хорошо.

7 голосов
/ 26 октября 2014

понимание списка предназначены для создания списка. Поэтому использование print изнутри вызовет ошибку, независимо от того, используется ли print () или print в 2.7 или 3.x. Код

[my_item for my_item in my_list] 

создает новый объект типа list.

print [my_item for my_item in my_list]

распечатывает этот новый список целиком

см .: здесь

7 голосов
/ 26 января 2010

Это синтаксическая ошибка, потому что print не является функцией. Это утверждение. Так как вам явно не важно возвращаемое значение из print (поскольку оно не имеет ни одного), просто напишите обычный цикл:

for my_item in my_list:
    print my_item
0 голосов
/ 06 марта 2019

print в python 3 делает более понятным, как его использовать.

квадратные скобки в понимании списка означают, что на самом деле выводом будет список. L1=['a','ab','abc'] print([item for item in L1]) Это должно сработать.

...