2010-01-26 16 views

risposta

48

A causa di stampa non è una funzione, è una dichiarazione, e non le può avere nelle espressioni. Questo diventa più ovvio se si utilizza la normale sintassi Python 2:

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

Ciò non sembra giusto. :) La parentesi intorno a my_item ti inganna.

Questo è cambiato in Python 3, btw, dove la stampa è una funzione, in cui il codice funziona perfettamente.

+21

È possibile importare questa funzione dal futuro: 'da __future__ importazione print_function' –

+0

@ THC4k - Sono d'accordo, questo renderà sicuro che il codice può essere compilato in * entrambi * 2.6 e 3.0 –

+0

Giusto, dal momento che menziona specificamente 2.6, questo è un buon punto. –

6

È un errore di sintassi perché print non è una funzione. È una dichiarazione. Dal momento che, ovviamente, non si preoccupano il valore restituito da print (dal momento che non ne ha), basta scrivere il ciclo normale:

for my_item in my_list: 
    print my_item 
5

di lista sono progettati per creare un elenco. Quindi usare la stampa al suo interno darà un errore, non importa che usiamo print() o stampiamo in 2.7 o 3.x. Il codice

[my_item for my_item in my_list] 

crea un nuovo oggetto di tipo elenco.

print [my_item for my_item in my_list] 

stampe fuori questa nuova lista nel suo complesso

riferiscono: here

+2

* "non importa che usiamo print() o stampiamo in 2.7 o 3.x" * Questo vale solo per python 2.x, non per python 3.x. '[print (char) per char in" abc "]' è valido (ma scoraggiato) in python 3.x – jDo

Problemi correlati