Para hacer mis scripts simples en Python 2.7.10, ¿debería usar la función de impresión en lugar de la declaración para hacerlos a prueba en el futuro, en caso de que quiera probarlos en otra computadora con solo Python 3, o en un IDE en línea? ¿Cuál es la mejor manera que funciona mejor con ambas o las versiones más comunes de Python?

¿Cuáles son las diferencias? Este es mi primer lenguaje de programación que estoy aprendiendo, así que no estoy seguro. En este momento, tengo una variable fija que ingreso en '2' o '3' y luego una instrucción if en el código realiza una función de impresión y un método de concatenación diferentes para cualquiera de las versiones.

--Ejemplos--

Lo que estoy usando ahora:

print "Hello world!"

¿Pero debería usar esto en ambas versiones?

print ("Hello world!")
5
Shane Smiskol 10 dic. 2015 a las 03:47

4 respuestas

La mejor respuesta

Python 2.7.10 no tiene una función print(), a menos que la importe. Agregar paréntesis no lo convierte en una función, solo especifica la agrupación. Si intenta imitar el paso de varios objetos, imprimirá un tuple.

>>> print 1
1
>>> print (1)
1
>>> print 1,2
1 2
>>> print (1,2)
(1, 2)

Agregar paréntesis alrededor de lo que print puede hacer que su programa sea un poco más robusto en términos de si se ejecuta con Python 2 o 3, pero cualquier cosa más que el uso básico producirá resultados inesperados. print (1,2) en Python 3 producirá el mismo resultado que print 1,2 en Python 2. Si desea compatibilidad real, debe importar la función de impresión (que se puede hacer de forma segura en Python 2 o 3, pero solo hace una diferencia en Python 2):

>>> from __future__ import print_function
>>> print (1,2)
1 2
11
TigerhawkT3 10 dic. 2015 a las 00:55

Si desea que su código de Python 2 se parezca más a Python 3, use una importación __future__:

from __future__ import print_function

Luego use print() como lo haría en Python 3.

Esto es mucho mejor que simplemente poner paréntesis en la declaración print, porque:

x = 100
print("Results:", x)

Esto imprimirá ("Results:", 100) en Python 2.x, pero si usa la importación o Python 3.x, imprimirá Results: 100 como se esperaba.

Sin embargo, si simplemente le preocupa la portabilidad, el programa 2to3 hace un muy buen trabajo al convertir las declaraciones print en llamadas a funciones print().

También puede importar unicode_literals, division, etc. para hacer que otras partes de su código se parezcan más a Python 3. O simplemente puede continuar y cambiar a Python 3 ahora.

3
Dietrich Epp 10 dic. 2015 a las 00:55

Si realmente desea admitir Python 2 y 3, debe usar la función print() y aplicarla mediante una importación futura colocando esto en la parte superior de su archivo;

from __future__ import print_function

Ahora, en Python 2, usar print como una declaración es un error de sintaxis.

>>> print ""
  File "<stdin>", line 1
    print ""
           ^
SyntaxError: invalid syntax

Puede acceder a la funcionalidad más avanzada de la función print(), por ejemplo:

>>> print(*[1,2,3,4], sep=':', end='!')
1:2:3:4!
1
mhawke 10 dic. 2015 a las 00:55

Cualquiera de esas líneas funcionará tanto en 2.7 como en 3.x

print ("Hello world!")
print("Hello world!")

Un ejemplo de una declaración de impresión solo 2.7 sería así:

print "Hello world!"

Probablemente debería seguir adelante y usar los paréntesis para probar su código en el futuro, y el formato PEP8 se ve así, con la advertencia a continuación:

print("Hello world!")

Sin espacio entre la función y el par abierto.

Esto anterior funcionará bien para cadenas simples, sin embargo, la solución real es importar la función de impresión del futuro de la siguiente manera:

from __future__ import print_function

Esto hará que la impresión sea una función real en Python 2, similar a como es en Python 3. Un lugar en el que simplemente te rodearán los paréntesis es cuando lo haces:

print 1,2

Vs.

print(1, 2)

Python 2 tratará a este último como una tupla, y verá un cambio en la salida de esta manera:

>>> print 1,2 
1 2
>>> print(1,2) 
(1, 2)
1
jgritty 10 dic. 2015 a las 01:19
34191828