Articles

GeeksforGeeks

Posted on
  • Operador de división
  • Función print
  • Unicode
  • xrange
  • Manejo de errores
  • Módulo futuro
  • Operador de división

    Si estamos portando nuestro código o ejecutando código de python 3.x en python 2.x, puede ser peligroso que los cambios en la división de enteros pasen desapercibidos (ya que no levanta ningún error). Es preferible utilizar el valor flotante (como 7,0/5 o 7/5,0) para obtener el resultado esperado al portar nuestro código.

    Python

    print7/5

    print-7/5

    
    
    
    
    Función de impresión

    Este es el cambio másconocido. En él, la palabra clave print en Python 2.x se sustituye por la función print() en Python 3.x. Sin embargo, los paréntesis funcionan en Python 2 si se añade espacio después de la palabra clave print porque el intérprete lo evalúa como una expresión.

    Python

    printiv 'Hello, Geeks'

    print('Hope You like these facts')

    
    

    
    

    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.

    Unicode:

    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 '))

    
    
    
    

    Python 2.x también soporta Unicode

    Python

    print(type('default string '))

    print(type(u'string with b '))

    
    
    
    

    xrange:

    xrange() de Python 2.x no existe en Python 3.x. En Python 2.x, range devuelve una lista, es decir, range(3) devuelve 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 soporta slices y otros métodos de lista. La ventaja de xrange() es que ahorra memoria cuando la tarea es iterar sobre un rango grande.
    En Python 3.x, la función range ahora hace lo que xrange hace en Python 2.x, así que para mantener nuestro código portable, podríamos querer seguir usando un rango en su lugar. Así que la función range de Python 3.x es xrange de Python 2.x.

    Python

    forx inxrange(1, 5):

    print(x),

    forx inrange(1, 5):

    print(x),

    
    
    
    

    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

    exceptNameError, err:

    printerr, 'Error Caused'

    
    

    
    

    Python

    try:

    trying_to_check_error

    exceptNameError as err:

    print(err, 'Error Caused')

    
    

    
    

    Módulo__futuro__:

    Esto básicamente no es una diferencia entre las dos versiones, pero es algo útil de mencionar aquí. La idea del módulo __future__ es ayudar a migrar a Python 3.x.
    Si estamos planeando tener soporte para Python 3.x en nuestro código 2.x, podemos usar importaciones _future_ en nuestro código.
    Por ejemplo, en el código de Python 2.x de abajo, utilizamos el comportamiento de división de enteros de Python 3.x usando el módulo __future__.

    Python

    from__future__ importdivision print7/5

    print-7/5

    
    
    
    

    Salida :

    1.4 -1.4 

    Otro ejemplo en el que usamos paréntesis en Python 2.x utilizando el módulo __future__:

    Python

    from

    __future__ importprint_function

    print('GeeksforGeeks')

    
    
    
    

    Salida:

    GeeksforGeeks 

    Consulta esto para más detalles del módulo __future__.

    Este artículo ha sido aportado por Arpit Agarwal. Si te gusta GeeksforGeeks y quieres contribuir, también puedes escribir un artículo y enviarlo por correo a [email protected]. Verás tu artículo aparecer en la página principal de GeeksforGeeks y ayudarás a otros Geeks.

Deja una respuesta

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