2010-01-26 6 views

Répondre

48

Parce que l'impression n'est pas une fonction, il est une déclaration, et vous ne pouvez pas les avoir dans les expressions. Cela devient plus évident si vous utilisez la syntaxe Python 2 normale:

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 tricks.

Cela a changé dans Python 3, btw, où l'impression est une fonction, où votre code fonctionne très bien.

+21

Vous pouvez importer cette fonction de l'avenir: 'de __future__ print_function' import –

+0

@ THC4k - Je suis d'accord, cela fera Bien sûr, le code peut être compilé dans * deux * 2.6 et 3.0 –

+0

Bien, puisqu'il mentionne spécifiquement 2.6, c'est un bon point. –

6

Il s'agit d'une erreur de syntaxe car print n'est pas une fonction. C'est une déclaration. Puisque vous ne se soucient pas de toute évidence de la valeur de retour de print (puisqu'il en a pas), il suffit d'écrire la boucle normale:

for my_item in my_list: 
    print my_item 
5

compréhension de la liste sont conçus pour créer une liste. Donc, en utilisant l'impression à l'intérieur, cela donnera une erreur, peu importe que nous utilisions print() ou que nous imprimions en 2.7 ou 3.x. Le code

[my_item for my_item in my_list] 

fait 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èrent: here

+2

* "nous utilisons print() ou print en 2.7 ou 3.x" * Cela n'est vrai que pour python 2.x, pas pour python 3.x. '[print (char) pour char dans" abc "]' est valide (mais découragé) dans python 3.x – jDo

Questions connexes