operador de división
Si estamos portando nuestro código o ejecutando código python 3.x en python 2.x, puede ser peligroso si los cambios en la división de enteros pasan desapercibidos (ya que no genera ningún error). Es preferible usar el valor flotante (como 7.0/5 o 7/5.0) para obtener el resultado esperado al portar nuestro código.
Python
print 7 / 5 print -7 / 5 ''' Output in Python 2.x 1 -2 Output in Python 3.x : 1.4 -1.4 # Refer below link for details # https://www.geeksforgeeks.org/division-operator-in-python/ '''
función de impresión
Este es el cambio más conocido. En esto, la palabra clave print en Python 2.x se reemplaza por la función print() en Python 3.x. Sin embargo, los paréntesis funcionan en Python 2 si se agrega un espacio después de la palabra clave de impresión porque el intérprete lo evalúa como una expresión.
Python
print 'Hello, Geeks' # Python 3.x doesn't support print('Hope You like these facts') ''' Output in Python 2.x : Hello, Geeks Hope You like these facts Output in Python 3.x : File "a.py", line 1 print 'Hello, Geeks' ^ SyntaxError: invalid syntax Refer below link for details https://www.geeksforgeeks.org/g-fact-25-print-single-multiple-variable-python/ '''
Como podemos ver, si usamos paréntesis en python 2.x, entonces no hay problema, pero si no usamos paréntesis en python 3.x, obtenemos SyntaxError.
código único:
En Python 2, un tipo str implícito es ASCII. Pero en Python 3.x, el tipo str implícito es Unicode.
Python
print(type('default string ')) print(type(b'string with b ')) ''' Output in Python 2.x (Bytes is same as str) <type 'str'> <type 'str'> Output in Python 3.x (Bytes and str are different) <class 'str'> <class 'bytes'> '''
Python 2.x también es compatible con Unicode
Python
print(type('default string ')) print(type(u'string with b ')) ''' Output in Python 2.x (Unicode and str are different) <type 'str'> <type 'unicode'> Output in Python 3.x (Unicode and str are same) <class 'str'> <class 'str'> '''
rango x:
xrange() de Python 2.x no existe en Python 3.x. En Python 2.x, range devuelve una lista, es decir, range(3) devuelve [0, 1, 2] mientras que xrange devuelve un objeto xrange, es decir, xrange(3) devuelve un objeto iterador que funciona de forma similar al iterador de Java y genera un número cuando es necesario.
Si necesitamos iterar sobre la misma secuencia varias veces, preferimos range() ya que range proporciona una lista estática. xrange() reconstruye la secuencia cada vez. xrange() no es compatible con sectores y otros métodos de lista. La ventaja de xrange() es que ahorra memoria cuando la tarea es iterar en un rango amplio.
En Python 3.x, la función de rango ahora hace lo que hace xrange en Python 2.x, por lo que para mantener nuestro código portátil, es posible que deseemos seguir usando un rango en su lugar. Entonces, la función de rango de Python 3.x es xrange de Python 2.x.
Python
for x in xrange(1, 5): print(x), for x in range(1, 5): print(x), ''' Output in Python 2.x 1 2 3 4 1 2 3 4 Output in Python 3.x NameError: name 'xrange' is not defined '''
Manejo de errores:
Hay un pequeño cambio en el manejo de errores en ambas versiones. En python 3.x, se requiere la palabra clave ‘as’.
Python
try: trying_to_check_error except NameError, err: print err, 'Error Caused' # Would not work in Python 3.x ''' Output in Python 2.x: name 'trying_to_check_error' is not defined Error Caused Output in Python 3.x : File "a.py", line 3 except NameError, err: ^ SyntaxError: invalid syntax '''
Python
try: trying_to_check_error except NameError as err: # 'as' is needed in Python 3.x print (err, 'Error Caused') ''' Output in Python 2.x: (NameError("name 'trying_to_check_error' is not defined",), 'Error Caused') Output in Python 3.x : name 'trying_to_check_error' is not defined Error Caused '''
Módulo __futuro__:
Básicamente, esto no es una diferencia entre las dos versiones, pero es algo útil para mencionar aquí. La idea del módulo __future__ es ayudar a migrar a Python 3.x.
Si planeamos tener compatibilidad con Python 3.x en nuestro código 2.x, podemos usar _future_ imports en nuestro código.
Por ejemplo, en el código de Python 2.x a continuación, usamos el comportamiento de división de enteros de Python 3.x usando el módulo __future__.
Python
# In below python 2.x code, division works # same as Python 3.x because we use __future__ from __future__ import division print 7 / 5 print -7 / 5
Producción :
1.4 -1.4
Otro ejemplo donde usamos corchetes en Python 2.x usando el módulo __future__:
Python
from __future__ import print_function print('GeeksforGeeks')
Producción:
GeeksforGeeks
Consulte esto para obtener más detalles del módulo __future__.
Este artículo es una contribución de Arpit Agarwal . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo y enviarlo por correo electrónico a contribuya@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA