En Python 2.7, lo siguiente hará lo mismo
print("Hello, World!") # Prints "Hello, World!"
print "Hello, World!" # Prints "Hello, World!"
Sin embargo, lo siguiente no
print("Hello,", "World!") # Prints the tuple: ("Hello,", "World!")
print "Hello,", "World!" # Prints the words "Hello, World!"
En Python 3.x, el paréntesis print
es obligatorio, lo que esencialmente lo convierte en una función, pero en 2.7 ambos funcionarán con resultados diferentes. ¿Qué más debo saber sobre print
Python 2.7?
python
printing
python-3.x
python-2.7
Hubro
fuente
fuente
print
es en realidad una declaración especial, no una función. Esta es también la razón por la que no se puede usar como:lambda x: print x
Tenga en cuenta que(expr)
no crea una Tupla (da como resultadoexpr
), pero lo,
hace.from __future__ import print_function
Respuestas:
En Python 2.x
print
es en realidad una declaración especial y no una función *.Esta es también la razón por la que no se puede usar como:
lambda x: print x
Tenga en cuenta que
(expr)
no crea una tupla (da como resultadoexpr
), pero lo,
hace. Esto probablemente resulte en la confusión entreprint (x)
yprint (x, y)
en Python 2.7Sin embargo, dado que
print
es una construcción de declaración / gramática de sintaxis especial en Python 2.x, entonces, sin el paréntesis, trata a los,
de una manera especial y no crea una Tupla. Este tratamiento especial de laprint
declaración le permite actuar de manera diferente si hay un seguimiento,
o no.Codificación feliz.
* Este
print
comportamiento en Python 2 se puede cambiar al de Python 3:fuente
(expr) != tuple
explicación :-)Todo es muy simple y no tiene nada que ver con la compatibilidad hacia adelante o hacia atrás.
La forma general de la
print
declaración en todas las versiones de Python antes de la versión 3 es:(Cada expresión a su vez se evalúa, se convierte en una cadena y se muestra con un espacio entre ellas).
Pero recuerde que poner paréntesis alrededor de una expresión sigue siendo la misma expresión.
Entonces también puedes escribir esto como:
Esto no tiene nada que ver con llamar a una función.
fuente
print (expr1), (expr2), ... (expr3)
, se trata de por quéprint (expr1, expr2, ... , expr3)
es legal en Python 2.x mientras que no debería estar de acuerdo con los estándares 2.x.Aquí tenemos un efecto secundario interesante cuando se trata de UTF-8.
La última impresión es una tupla con valores de bytes hexadecimales.
fuente
repr
en ella, en cuyo punto probablemente codifica todas las cadenas en el dictado en ASCII.#encoding=utf-8
, linux envLANG=en_US.UTF-8
. Así que repr codifica no usando ASCII predeterminado, sino codificación utf-8.str
con lastring_escape
codificación especial . La cadena ya estaba codificada en Unicode como UTF-8.repr
probablemente se toman medidas para garantizar que el texto se pueda representar mediante ASCII (mediante el escape de símbolos no ASCII), no necesariamente que la cadena esté codificada como ASCII. Sin embargo, todavía no sé si eso es completamente exacto.repr()
salida cuando se convierten en una cadena (no implementan__str__
, solo__repr__
). Lo que ve no es especial para UTF-8; elrepr()
de una cadena le proporciona literales de cadena de Python válidos que son seguros para ASCII.Básicamente, en Python antes de Python 3, print era una declaración especial que imprimía todas las cadenas si se obtenían como argumentos. Así que
print "foo","bar"
simplemente significa "imprimir 'foo' seguido de 'barra'". El problema con eso era que era tentador actuar como si print fuera una función, y la gramática de Python es ambigua en eso, ya que(a,b)
es una tupla que contienea
yb
perofoo(a,b)
es una llamada a una función de dos argumentos.Así que hicieron el cambio incompatible de 3 para que los programas fueran menos ambiguos y más regulares.
(En realidad, creo que 2.7 se comporta como 2.6 en esto, pero no estoy seguro).
fuente