Понимание списка: почему это синтаксическая ошибка?

Почему 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]

person monojohnny    schedule 26.01.2010    source источник


Ответы (4)


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

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

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

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

person Lennart Regebro    schedule 26.01.2010
comment
Вы можете импортировать эту функцию из будущего: from __future__ import print_function - person Jochen Ritzel; 26.01.2010
comment
@THC4k - согласен, это гарантирует, что код можно будет скомпилировать в как 2.6, так и 3.0 - person Jason Coon; 26.01.2010
comment
Правильно, поскольку в нем конкретно упоминается 2.6, это хороший момент. - person Lennart Regebro; 27.01.2010
comment
FWIW, в версии 2.7 и использовании будущего импорта приведенный выше код у меня не работает. а) мне нужно использовать синтаксис скобок, print(x), чтобы избежать сообщения об ошибке синтаксиса, б) он выдает конечный список Nones после печати элементов списка: gist.github.com/maphew/67c88807bf97bf67fbf9 - person matt wilkie; 02.04.2015
comment
@mattwilkie: Судя по вашей сути, это ожидаемый результат. а) поскольку print теперь является функцией, вам нужно использовать синтаксис скобок, б) вы возвращаете списки None, поскольку print ничего не возвращает. - person Lucas Godoy; 15.01.2016
comment
@LucasGodoy любопытно, что это вторая часть, где используется фигурная скобка, но print печатает элементы списка, как и ожидалось, И серию None. - person matt wilkie; 15.01.2016
comment
... и означает, что окончательный приведенный выше код работает просто отлично, утверждение неверно. Это не работает - это чисто. Синтаксической ошибки нет, но результаты, скорее всего, неудовлетворительны. - person matt wilkie; 16.01.2016

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

[my_item for my_item in my_list] 

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

print [my_item for my_item in my_list]

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

см.: здесь

person Ishan Khare    schedule 26.10.2014
comment
независимо от того, используем ли мы print() или печатаем в 2.7 или 3.x Это верно только для python 2.x, а не для python 3.x. [print(char) for char in "abc"] допустим (но не рекомендуется) в python 3.x - person jDo; 28.04.2016

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

for my_item in my_list:
    print my_item
person Thomas Wouters    schedule 26.01.2010

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

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

person Cerebration    schedule 06.03.2019