web-dev-qa-db-fra.com

Compréhension de liste: pourquoi est-ce une erreur de syntaxe?

Pourquoi print(x) ici n'est pas valide (SyntaxError) dans la liste de compréhension suivante?

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

En revanche - ce qui suit ne donne pas d'erreur de syntaxe:

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

Parce que print n'est pas une fonction, c'est une instruction et vous ne pouvez pas les avoir dans des expressions. Cela devient plus évident si vous utilisez la syntaxe normale Python 2:

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

Cela ne semble pas tout à fait correct. :) Les parenthèses autour de my_item vous trompent.

Cela a changé dans Python 3, btw, où print is une fonction, où votre code fonctionne très bien.

61
Lennart Regebro

la compréhension de liste est conçue pour créer une liste. Ainsi, l'utilisation de print à l'intérieur donnera une erreur, peu importe que nous utilisions print () ou print en 2.7 ou 3.x. Le code

[my_item for my_item in my_list] 

crée un nouvel objet de type liste.

print [my_item for my_item in my_list]

imprime cette nouvelle liste dans son ensemble

se référer: ici

8
Ishan Khare

C'est une erreur de syntaxe car print n'est pas une fonction. C'est une déclaration. Comme vous ne vous souciez évidemment pas de la valeur de retour de print (car elle n'en a pas), écrivez simplement la boucle normale:

for my_item in my_list:
    print my_item
7
Thomas Wouters

print in python 3 le rend plus évident sur la façon de l'utiliser.

les crochets dans la compréhension de la liste indiquent que la sortie sera en fait une liste. L1=['a','ab','abc'] print([item for item in L1]) Cela devrait faire l'affaire.

0
Cerebration