2012-08-03 3 views
9

In python tutto è un oggetto e puoi passarlo facilmente.stampa una funzione in Python?

Così posso fare:

>> def b(): 
    ....print "b" 
>> a = b 
>> a() 
    b 

Ma se faccio

a = print 

ottengo SyntaxError. Perchè così ?

risposta

20

In Python 2.x, la stampa è una dichiarazione non una funzione. In 2.6+ è possibile abilitarlo per essere una funzione all'interno di un dato modulo usando from __future__ import print_function. In Python 3.x è una funzione che può essere passata in giro.

+4

+1 per '__future__'. – mgilson

+4

la dichiarazione futura è esplicita. Non infrangerà alcun codice perché riguarda solo il codice che lo aspetta nello stesso modulo – jfs

+0

@JFSebastian - grazie - lo confondo sempre con "Una dichiarazione futura digitata a un interprete interattivo avrà effetto per il resto del sessione di interprete. " –

3

print non è una funzione in pre 3.x python. Non sembra nemmeno uno, non c'è bisogno di chiamata facendo (params)

6

In python2, print è una dichiarazione. Se lo fai, from __future__ import print_function, puoi fare come hai descritto. In python3, ciò che hai provato funziona senza importazioni, poiché la stampa è stata creata come una funzione.

Questo è trattato nel PEP3105

4

Le altre risposte sono corrette. print è un'istruzione, non una funzione in python2.x. Quello che hai funzionerà su python3. L'unica cosa che devo aggiungere è che se vuoi qualcosa che funzioni su python2 e python3, puoi passare a sys.stdout.write. Questo non scrive una nuova riga (a differenza di print) - si comporta come qualsiasi altro oggetto file.

+1

+1 - Buon punto - ma potrebbe valere la pena di aggiungere nessun EOL implicito è stato scritto ... –

+0

@JonClements - Buon punto. aggiornato. – mgilson