2012-08-28 7 views
37

Entiendo la diferencia entre un enunciado y una expresión, y entiendo que Python3 convirtió print() en una función.Uso de print() (la versión de la función) en Python2.x

Sin embargo, ejecuté una instrucción print() rodeada de paréntesis en varios intérpretes de Python2.x y funcionó sin problemas, ni siquiera tuve que importar ningún módulo.

Mi pregunta: ¿Se evalúa el siguiente código print("Hello SO!") como una declaración o expresión en Python2.x?

Respuesta

38

considerar las siguientes expresiones:

a = ("Hello SO!") 
a = "Hello SO!" 

Son equivalentes. De la misma manera, con una declaración:

statement_keyword("foo") 
statement_keyword "foo" 

también son equivalentes.

Tenga en cuenta que si cambia de función de impresión a:

print("Hello","SO!") 

Se dará cuenta de la diferencia entre el pitón 2 y 3. Con pitón pitón 2, el (...,...) se interpteted como una tupla de impresión ya es una declaración mientras que en Python 3, es una llamada a función con múltiples argumentos.

Por lo tanto, para responder a la cuestión que nos ocupa, print se evalúa como una declaración en Python 2.x menos que from __future__ import print_function (introducido en pitón 2,6)

+0

... a menos que haya hecho 'desde __future__ import print_function' o como se llame. – delnan

+0

¿Sería perjudicial usar en __future__ import print_function en Python3? No da un error de importación. – sgoblin

+1

@sgoblin - No. el módulo '__future__' garantiza que nada será eliminado de él. Es efectivamente un no-operador en python3.x – mgilson

2

Todavía se evalúa como una declaración, simplemente está imprimiendo ("Hello SO!"), que simplemente evalúa como "Hello SO!" ya que no es una tupla (como lo menciona delnan).

+3

Y para ser claro, '("Hola SO!")' Es exactamente equivalente a '' - que no es una tupla "Hola SO!". – delnan

+0

Gracias @delnan, vi tu comentario justo antes de publicar una buena respuesta sobre tuplas de 1 elemento. –

+2

Y para ampliar el comentario de delnan, para crear una tupla, necesita una coma (por ejemplo, '(" ¡Hola! ",)') – mgilson

12

print("Hello SO!") se evalúa como la declaración print ("Hello SO!"), donde el argumento de la print instrucción es la expresión ("Hello SO!").

Esto puede marcar la diferencia si está imprimiendo más de un valor; por ejemplo, print("Hello", "world") imprimirá la tupla de 2 elementos ('Hello', 'world') en lugar de las dos cadenas "Hello" y "world".

Para la compatibilidad con Python 3 utilización from __future__ import print_function:

>>> print("Hello", "world") 
('Hello', 'world') 
>>> from __future__ import print_function 
>>> print("Hello", "world") 
Hello world 
+0

Si quiere ser compatible con python2.5 y python3.x puede usar la interpolación de cadenas (aunque no creo que mucha gente defienda que estos días ...) – mgilson

+4

Esto también es bastante interesante. Tenga en cuenta que si coloca esto en una secuencia de comandos, fallará porque las importaciones '__future__' deben ocurrir al principio del archivo, pero por alguna magia profunda de python, funciona en el intérprete interactivo. – mgilson

Cuestiones relacionadas