Diferencias clave entre Python 2 y 3: Cómo navegar por el cambio
Este tutorial cubrirá los siguientes temas:
- Expresiones
- Opciones de impresión
- Operaciones de desigualdad
- Rango
- Migración automatizada
- Problemas de rendimiento
- Algunos cambios importantes en la casa
- ¿Tienes problemas?
Expresiones
Las expresiones representan algo, como un número, una cadena o una instancia de una clase. ¡Cualquier valor es una expresión! Cualquier cosa que haga algo es una expresión. Cualquier asignación a una variable o llamada a una función es una expresión. Cualquier valor contenido en esa declaración en una expresión.
Esto es lo que escribirías para obtener una expresión evaluada en Python 2:
X = raw_input ("enter some values)
Pero en Python 3, tendrías que escribir esto:
X = input ("enter some values")
Así, lo que introduzcamos entonces para el valor se asigna a la variable x tanto en 2 como en 3. Cuando introduzco 2*6 en Python 2, el resultado será 12, que es el valor evaluado.
Sin embargo, cuando este mismo programa se ejecuta en Python 3, el resultado son valores de cadena. En este caso, se vería como 2*6 en formato de cadena.
Entonces, ¿cómo podemos obtener la expresión evaluada? Ahora, tenemos que usar una expresión o función llamada eval. Cuando escribes eval antes de la entrada, convertirá la expresión en un valor evaluado.
x= eval(input("enter some values")) = 12
Ejemplos de expresiones detalladas:
Así es como se vería en Python 2:
name = input("What is your name? ")print ("Hello, %s." %name)
Y la salida:
Así se vería en Python 3:
name = input("What is your name? ")print ("Hello, %s." %name)
Y la salida:
Como puedes ver claramente, hay muy poca diferencia entre ambos.
Lee también: Una introducción al lenguaje de programación Python
Cuando Guido van Rossum desarrolló Python, quería crear un lenguaje de programación «simple» que evitara las vulnerabilidades de otros sistemas. Gracias a su sencilla sintaxis y a sus sofisticadas frases sintácticas, el lenguaje se ha convertido en el estándar para diversas aplicaciones científicas, como el aprendizaje automático.
Opciones de impresión
En Python 2, print es una sentencia que no necesita paréntesis. En Python 3, print es una función y los valores necesitan ser escritos entre paréntesis.
Python 2
Input:
print "hello world"
Output:
Python 3
Input:
1 != 1.0print (False)
Salida:
Operaciones desiguales
Pasemos a la tercera diferencia. Cuando usamos un operador desigual en Python 2, tenemos que usar los signos mayor que > o menor que <. Sin embargo, en Python 3 existe un operador general. El signo de exclamación ! y el signo de igualdad = se utilizan para mostrar si las cosas no son iguales a la misma cantidad.
Python 2 – <> operador se utiliza para no igual
Python 3 – ! se utiliza el operador no igual
Python 2
Entrada:
1 <> 1.0print "False"
Salida:
Python 3
Input:
1 != 1.0print (False)1 != 1.0print (False)
Output:
Ve también: Miradas: Vigila bien tu código con esta herramienta de monitorización de Python
Rangos
Ahora, pasemos a los rangos. Qué son los rangos?
Un rango sirve para generar una lista de números, que generalmente se utiliza para iterar sobre ella con for
bucles.
Aquí puedes ver que X es igual al Rango 10. Cuando comprobamos la variable X, nos devolvió el tipo de lista. Esto significa que en Python 2, rango es el tipo de lista. Cuando escribo X, después de eso, obtenemos una lista de objeto. que es 0 1 2 3 4 5 6 7 8 9.
Ahora vamos a pasar al Python 3, cuando escribimos x igual a rango 5. Este valor de rango 5 se asigna a la variable X; cuando comprobamos el tipo de la variable X, entonces nos devuelve un objeto de rango propiamente dicho. Esto significa que en Python 3 range es un objeto range en sí mismo.
Python 2
Input:
print range(0,10,1)
Output:
Python 3
Input:
print(list(range(10)))
Output:
Migración automatizada
Entonces, ¿cómo automatizamos el script de migración para pasar código de Python 2 a 3?
Aquí podemos probar con un programa sencillo como Suma 2 Números en python.
Python 2
Input:
n1 = 1n2 = 2add = float(n1) + float(n2)print 'sum of {0} and {1} is {2}'.format(n1, n2, add)
Output:
Ahora usando la migración de 2 a 3 podemos convertir el código anterior.
Input:
n1 = 1n2 = 2add = float(n1) + float(n2)print('sum of {0} and {1} is {2}'.format(n1, n2, add))
Output:
Así que aquí vemos que se puede convertir a código Python 3 mediante 2 to 3 en la línea de comandos.
Python proporciona su propia herramienta llamada 2to3.py. La cual ejecuta un montón de scripts para traducir tu código python 2 a 3. Si bien no es perfecta, pero hace un trabajo increíble en general. Después de convertir cualquier código, deberías ir y arreglar manualmente cualquier problema.
Ve también: Ven, Nagini. Tenemos que verificar ese código Python
Rendimiento
¡La mayoría de los problemas de rendimiento se han solucionado en esta actualización! Cuando se comparan los benchmarks entre las dos versiones, las diferencias son casi insignificantes.
Algunos cambios importantes de mantenimiento
Python 2
- Imprimir paréntesis funcionales opcional.
- Prefijar cadena con u para hacer cadena unicode.
- División de enteros siempre devuelve entero – 5/2=2.
- Raw_input () lee cadena.
- input() evalúa datos leídos.
- generador .next().
Python 3
- impresión obligatoria de paréntesis funcionales.
- Cadena unicode por defecto.
- División de enteros puede resultar en float – 5/2=2,5.
- Raw_input() no disponible.
- Input siempre lee string.
- Next (generador).
- Utilidad de Py2 a py3.
- Diccionario .keys() y .values() devuelve una vista no una lista.
- Ya no se pueden usar operadores de comparación en comparaciones no naturales.
Eg. None < None lanzará un TypeError en lugar de devolver false. - El operador de formato de cadena porcentual (%) está obsoleto usa la función .format() o la concatenación.
VEA TAMBIÉN: Top 5 IDEs y editores de código para Python
¿Tienes problemas?
Puede que te encuentres con algún error aquí y allá si llevas tiempo trabajando en python 2.x. No pasa nada. Sólo tienes que buscar el problema en Google, es casi seguro que alguien más también ha tenido ese problema al migrar.