2012-08-03 17 views
9

En python todo es un objeto y puedes pasarlo fácilmente.es imprimir una función en Python?

Así que puedo hacer:

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

Pero si lo hago

a = print 

Puedo obtener SyntaxError. Porque ?

Respuesta

20

En Python 2.x, la impresión es una declaración no una función. En 2.6+ puede habilitarlo para que sea una función dentro de un módulo dado usando from __future__ import print_function. En Python 3.x es una función que se puede pasar.

+4

+1 para '__future__'. – mgilson

+4

la declaración futura es explícita. No romperá ningún código porque solo afecta al código que lo espera en el mismo módulo – jfs

+0

@JFSebastian - gracias - Siempre confundo eso con "Una declaración futura escrita en un intérprete interactivo se aplicará para el resto del sesión de intérprete ". –

3

print no es una función en pre 3.x python. Ni siquiera se parece a uno, no es necesario llamada por (params)

6

En python2, print es una afirmación. Si lo hace from __future__ import print_function, puede hacer lo que describió. En python3, lo que probaste funciona sin importar, ya que la impresión se convirtió en una función.

Esto se trata en PEP3105

4

Las otras respuestas son correctas. print es una declaración, no una función en python2.x. Lo que tienes funcionará en python3. Lo único que tengo que agregar es que si quieres algo que funcione en python2 y python3, puedes pasar el sys.stdout.write. Esto no escribe una nueva línea (a diferencia de print) - actúa como cualquier otro objeto de archivo.

+1

+1 - Buen punto - pero podría valer la pena agregar que no se ha escrito ninguna EOL implícita ... –

+0

@JonClements - Buen punto. actualizado. – mgilson

Cuestiones relacionadas