Módulo __futuro__ en Python

El módulo __future__ es un módulo incorporado en Python que se usa para heredar nuevas funciones que estarán disponibles en las nuevas versiones de Python. 

Este módulo incluye todas las últimas funciones que no estaban presentes en la versión anterior de Python. Y podemos usar esto importando el módulo __future__. Sus lanzamientos están en Python versión 2.1. La idea básica del módulo __future__ es ayudar a migrar para usar las características de Python 3.X. 

Nota: Las declaraciones futuras deben estar en la parte superior del archivo; de lo contrario, el intérprete de Python generará SyntaxError

Las siguientes características en este módulo:

Características Opcional en Obligatorio en
ámbitos_anidados 2.1 2.2
generadores 2.2 2.3
división 2.2 3.0
importación_absoluta 2.5 3.0
con_declaración 2.5 2.6
imprimir_funcion 2.6 3.0
literales_unicode 2.6 3.0
generador_parada 3.5 3.7
anotaciones 3.7 3.11

Características básicas en el futuro módulo:

Hay siete características en el módulo futuro de Python.

Python

import __future__
print(__future__.all_feature_names)

Producción:

['nested_scopes',  
'generators',
'division',
'absolute_import',
'with_statement',
'print_function',
'unicode_literals']

Módulo __futuro__ con función de impresión

Ejemplo 1: 

La declaración de impresión de Python2 es diferente de la función de impresión de Python3. Usamos la declaración de impresión de Python en Python2 como:

print "Hello world"

Pero podemos usar la función de impresión de Python3 en la función de Python2 usando los módulos futuros.

Python

# Code in Python 2
from __future__ import print_function
  
print("Hello world")

Producción:

Hello world

Ejemplo 2: 

Aquí vamos a imprimir el mensaje en Python 2.X con los atributos finales que vienen en Python 3 y «finalizar» agrega una string en una nueva línea. Y generará un error porque la función no es compatible con 2.x.

Python

# In 2.7 python compiler
print("Hello world", end=" ")

Producción:

File "main.py", line 1
    print("Hello world", end=" ")
                            ^
SyntaxError: invalid syntax

Entonces, con la función de impresión __future__ podemos importar estas características en nuestro código para usar la función de impresión más reciente.

Python

# In 2.7 python compiler
from __future__ import print_function
  
print("Hello world", end=";")

Producción:

Hello world;

Ejemplo 3: 

sep también pertenece a Python 3.x pero aquí usaremos estos atributos usando este módulo. Verifiquemos estos atributos sin usar los módulos futuros.

Python3

# In 2.7 python compiler
print('Welcome ', ' Geeksforgeeks', sep = ' To ')

Producción:

  File "main.py", line 1
    print('Welcome ', ' Geeksforgeeks', sep=' To ')
                                           ^
SyntaxError: invalid syntax

Entonces usemos la función de impresión __future__ para usar los atributos sep.

Python

# In 2.7 python compiler
from __future__ import print_function
print('Welcome ', ' Geeksforgeeks', sep=' To ')

Producción:

Welcome To Geeksforgeeks

Módulo __futuro__ con función de división

Aquí vamos a usar la función de división en Python2.x y Python3.x.

Veamos el ejemplo en Python2.x. 

Python

# In 2.7 python compiler
print 7 / 5
   
print -7 / 5

Producción:

1.4
-1.4

Y veamos esto con el módulo futuro, le dará el resultado exacto.

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

Módulo __future__ con función unicode_literals

En Python2.x no podemos usar Unicode, pero los módulos futuros nos permiten usar Unicode.

Ejemplo 1: 

En Python2, las strings se consideran strings de bytes, pero en versiones posteriores, todas las strings se consideran strings Unicode.

Python

# code in Python2
print(type("Geeks"))

Producción:

<type 'str'>

Usemos el módulo futuro en Python2.

Python

# code in Python2
from __future__ import unicode_literals
  
print(type("Geeks"))

Producción:

<type 'unicode'>

Ejemplo 2:

veamos el ejemplo sin el módulo futuro, generará un error porque estamos creando una string de bytes que contiene bytes codificados en UTF-8

Python

# encoding: utf-8
name = 'helló wörld from example'
print name.encode('utf8')

Producción:

Traceback (most recent call last):
  File "main.py", line 3, in <module>
    print name.encode('utf8')
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 4: ordinal not in range(128)

Y se puede hacer en Python2X con futuros módulos.

Python

# encoding: utf-8
from __future__ import unicode_literals
name = 'helló wörld from example'
print name.encode('utf8')

Producción:

helló wörld from example

Publicación traducida automáticamente

Artículo escrito por kumar_satyam 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 *