Diferencias Entre Python 2 y Python 3

Posted on

En verdad, pienso que aprender y programar en Python 3 es la mejor opción, cuando una persona está hablando sobre Python en general. Python 2 es un legado, y el soporte para el lenguaje terminará en 2020. Sin embargo, muchos distros todavia dan soporte unicamente a Python 2, y Python 2 aún goza de gran popularidad dentro de la comunidad. La idea de cambiar a un lenguaje no compatible con versiones anteriores nunca es bien recibida. Python 3 ha existido por casi diez años. (Python 3.0 fue presentado en 2008, y Python 3.3 en 2012.)

Voy a describir algunas de las principales diferencia entre los dos.

En 2.7, print es uns sentencia (statement), y con 3.0, print es una función, print(). Python 2 no tiene una problema con añadir paréntesis pero con Python 3, no se utiliza paréntesis y tendrá un error de sintaxis, SyntaxError. También, dado que print es una función, puede usar parámetros opcionales. Por ejemplo:



Otra cosa a toma en cuenta es que aunque Python 2 puede usar paréntesis, si los usa y tiene muchos objetos dentro, Python 2 mostrará una tupla.

División

En Python 2, la división siempre resulta en un número entero, a menos que la división use un número de punto flotante. Sin embargo, en Python 3, la división resulta en un número de punto flotante, a menos que se indique lo contrario (es decir, truncando). Eso cambio es muy peligroso, porque no resulta en un SyntaxError (error de sintaxis), cuando una persona está portando código o ejecutando código de Python 3 a Python 2. Es reomendado que escriba código en Python 3 usando números de punto flotante y usando el modulo future cuando escriba código en Python 2.

xrange

En Python 2, xrange() creó un objeto iterable. Python 3 no tiene xrange(). Entonces, usa range() como si era xrange(). Si usa xrange() en Python 3, resultará en un error del nombre (es decir, NameError).

Las cadenas (‘strings’) son unicode

En Python 2, las cadenas (str()) son por defecto en ASCII. Eso significa que no puede escribir «ñ» o «ú». En Python 3, sin embargo, las cadenas son por defecto en utf-8, así que no se preocupe de no poder escribir «más ñora, por favor». Otra diferencia es Python 3 tiene dos tipos de bytes: bytes y btyearray. Es bien conocido que btyes, como las cadenas, es inmutable, mientras que bytearray es mutable.

 

Exepciones

En Python 2, puede arrojar excepciones de dos maneras. Por otro lado, Python 3 le da una error de sintaxis (SyntaxError), si trata de usar la antigua forma. Basicamente, las excepciones tienen que encerrarse en un paréntesis. Otra diferencia es que tiene que usar la palabra clave «as» cuando maneja excepciones.





for loop

Las variables usadas en los bucles for (for loops) no se filtran su valor fueara del bucle, (es decir, en el espacio global) en Python 3.

La función next() y el método .next()

En Python 2, tanto la función (next()) y el método (.next()) pueden ser usados. Sin embargo, en Python 3, sólo la función puede ser usada. Si trata de usar el método, obtendrá un error de atributo (AttributeError).

Comparando tipos no ordenables

No puede comparar unos tipos que son no el mismo, en Python 3.

input()

La función input (input()) ha sido cambiado a funcionar como raw_input() en Python 3. Eso significa que todos input de los usuarios archivarán como un tipo de str().

Objeto iterable en lugar de una lista

En Python 3, algunas funciones y métodos retornan objetos iterables en lugar de listas. Sin embargo, esto objetos pueden convertirse fácilmente en una lista con la función list.

Algunas otras funciones y métodos que han cambiado.

zip()

map()

filter()

.keys() método de diccionario

.values() método de diccionario

.items() método de diccionario

Redondeo del banquero

Python 3 uas el redondea del banquero. Redondeo del banquero es redondear al número par más póximo, cuando se le da un punto cinco por ciento. Por ejemplo, 6.5 se convierte 6.0 y 7.5 se convierte 8.0. La idea es parar el prejucio del redondeo hacia números largos.

El módulo future

El módulo future está destinado a ayudar con migración de 2.x o 3.x o si quiere que su código 2.x pueda usar código 3.x.

Caracteristicas Opcional en Obligatorio en El Efecto
nested_scopes 2.1.0b1 2.2 (PEP 227) angulos anidados estáticamente
generators 2.2.0a1 2.3 (PEP 255) generadores simples
division 2.2.0a2 3.0 (PEP 238) cambiando el operador de división
absolute_import 2.5.0a1 3.0 (PEP 328) importa: multi-líneas y absoluta/relativa
with_statement 2.5.0a1 2.6 (PEP 343) la sentencia «with»
print_function 2.6.0a2 3.0 (PEP 3105) convierte print en una función
unicode_literals 2.6.0a2 3.0 (PEP 3112) bytes literales en Python 3000

(Origen: https://docs.python.org/2/library/__future__.html)

 

Por más informatica, mirase estos sitios:

(íngles) http://sebastianraschka.com/Articles/2014_python_2_3_key_diff.html

https://www.pythonmania.net/es/2016/02/29/las-principales-diferencias-entre-python-2-y-3-con-ejemplos/

  • En verdad, repl.it tarda mucho tiempo en cargarse, así que estoy pensando en no usarlo la próxima vez.

  • Deja un comentario

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *