Python2 frente a Python3 | Comparación de sintaxis y rendimiento

Python 2.x ha sido la versión más popular durante más de una década y media. Pero ahora más y más personas están cambiando a Python 3.x. Python3 es mucho mejor que Python2 y viene con muchas características adicionales. Además, Python 2.x se está volviendo obsoleto este año. Por lo tanto, ahora se recomienda comenzar a usar Python 3.x a partir de ahora.

¿Todavía en dilema?
¿Alguna vez te has preguntado qué los separa a ambos? Averigüemos esto a continuación.

En primer lugar, analicemos esta comparación rápida a través de esta imagen, que le dará una idea clara de qué esperar.

Imprimir estado de cuenta

Python 2.7 : el par extra de paréntesis no es obligatorio en esto.

print 'Hello and welcome to GeeksForGeeks'

Python 3.x : el par de paréntesis adicional es obligatorio.

print ('Hello and welcome to GeeksForGeeks')

División entera

Python 2.7 :
el tipo de retorno de una operación de división (/) depende de sus operandos. Si ambos operandos son de tipo int, se realiza una división de piso y se devuelve un int. Si alguno de los operandos es un flotante, se realiza una división clásica y se devuelve un flotante. El operador // también se proporciona para realizar divisiones de piso sin importar cuáles sean los operandos.

print 5 / 2
print -5//2
  
# Output:
# 2
# -3

Python 3.x :
la división (/) siempre devuelve un flotante. Para hacer una división de piso y obtener un resultado entero (descartando cualquier resultado fraccionario), debe usar el operador //.

print (-5 / 2)
print (5//2)
  
# Output:
# -2.5
# 2

Función de entrada

Python 2.7 :
cuando usa la función input(), Python convierte automáticamente el tipo de datos en función de su entrada.

val1 = input("Enter any number: ")
val2 = input("Enter any string: ")
  
type(val1)
type(val2)

raw_input obtiene la entrada como texto (es decir, los caracteres que se escriben), pero no intenta traducirlos a nada más; es decir, siempre devuelve una string.

   
val1 = raw_input("Enter any number: ")
val2 = raw_input("Enter any string: ")
  
type(val1)
type(val2)

Python 3.x
En Python3, la función de entrada actúa como raw_input de Python 2.7 y siempre devuelve el tipo de string.

val1 = input("Enter any number: ")
val2 = input("Enter any string: ")
  
type(val1)
type(val2)
# In order to fix this you need to apply 
# float() function when user is prompted for input.

Función redonda

Python 2.7 : la salida siempre da como resultado un número de punto flotante.

print(round(69.9))  
print(round(69.4))
  
# Output: 
# 70.0
# 69.0

Python 3.x : la devolución da como resultado una precisión de n dígitos.

print(round(69.9))  
print(round(69.4))
  
# Output:
# 70
# 69

Lista de comprensiones

Python 2.7 : consulte el ejemplo a continuación, cómo cambia la variable global.

num = 7
print (num)
  
mylist = [num for num in range(100)]
print (num)
  
# Output:
# 7
# 99

Python 3.x : no hay ninguna fuga de espacio de nombres ahora. Esto está bastante arreglado ahora.

num = 7
print (num)
  
mylist = [num for num in range(100)]
print (num)
  
# Output: 
# 7
# 7

Función de rango

Python 2.7 :
tiene ambas range funciones xrange . Cuando necesite iterar un objeto a la vez, use xrange y cuando necesite una lista real, use la función de rango. xrange es generalmente más rápido y ahorra memoria.

% timeit [i for i in range(1000)]  
% timeit [i for i in xrange(1000)]

Python 3.x :
aquí range hace lo que hace xrange en Python 2.7. xrange no funciona en Python 3.x.

% timeit [i for i in range(1000)]  
% timeit [i for i in xrange(1000)]

Manejo de excepciones

Python 2.7 : tiene una sintaxis diferente a la de Python 3.x.

try:
    YoYo
except NameError, error:
    print error, "YOU HAVE REACHED FOR AN ERROR"
  
try:
    YoYo
except NameError as error:
    print error, "YOU HAVE REACHED AN ERROR, YET AGAIN !"

Python 3.x : se necesita la palabra clave ‘As’ para incluirla en esto.

try:
    YoYo
except NameError as error:
    print (error, "THE ERROR HAS ARRIVED !")

Lista de comprensiones

Python 2.7 : paréntesis menor que Python 3.x.

[item for item in 1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]

Python 3.x : aquí se necesita un par de paréntesis adicionales.

[item for item in (1, 2, 3, 4, 5)]
[1, 2, 3, 4, 5]

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

Python 2.7 : aquí se utilizan tanto next() como .next().

generator = (letter for letter in 'abcdefg')
next(generator)
generator.next()

Python 3.x : aquí solo se usa next(). El uso de .next() muestra un AttributeError.

generator = (letter for letter in 'abcdefg')
next(generator)

Tipos ASCII, Unicode y Byte

Python 2.7 : tiene un tipo de string ASCII, un tipo Unicode separado, pero no hay un tipo de byte.

type(unicode('a'))
type(u'a')
type(b'a')

Python 3.x : tenemos strings Unicode y tipo de byte.

type(unicode('a'))
# This returns an error

Nota: Lista de métodos y funciones que ya no devuelven la lista en Python 3.x.

In Python2.x - 

zip()
map()
filter()
dictionary’s .keys() method
dictionary’s .values() method
dictionary’s .items() method

Publicación traducida automáticamente

Artículo escrito por SohomPramanick y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

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