__future__ em Python

Hemank Mehtani 10 outubro 2023
  1. Use __future__ para print_function em Python
  2. Use __future__ para unicode_laterals em Python
  3. Use __future__ para divisão em Python
  4. Use __future__ para absolute_import em Python
  5. Use __future__ para annotations em Python
  6. Use __future__ para escopos aninhados
  7. Use __future__ para geradores Python
  8. Use __future__ para a declaração with
__future__ em Python

__future__ foi introduzido no Python 2.1, e suas instruções mudam a forma como o Python interpreta o código. Diz ao interpretador para compilar algumas instruções como aquelas que estarão disponíveis em versões futuras do Python, ou seja, o Python usa from __future__ import feature para transportar os recursos de versões superiores do Python para o interpretador atual.

Sempre que você vir from __future__ import, significa que um recurso da versão mais recente ou futura do Python foi transportado para uma versão anterior.

Este tutorial discutirá os recursos já habilitados no Python 3 em versões anteriores do Python usando __future__.

Use __future__ para print_function em Python

Usar a palavra-chave print como uma função em vez de uma instrução traz muita flexibilidade, o que ajuda a estender a capacidade da palavra-chave print. A função principal de from __future__ import print_function é trazer a função print do Python 3 para o Python 2.

Por exemplo,

from __future__ import print_function

for x in range(0, 10):
    print(x, sep=" ", end="")

Resultado:

0123456789

Observe que print aqui é usado como uma função, que antes era usada como uma instrução no Python 2.x

Use __future__ para unicode_laterals em Python

Isso permite que você altere o tipo de literais de string.

Literais de string são ‘str’ por padrão no Python 2, mas se usarmos from __future__ import unicode_literals, o tipo de literal de string muda para Unicode.

Por exemplo,

type("h")

Resultado:

<type 'str'> 

Mas com from __future__ import unicode_literals obtemos a seguinte saída.

from __future__ import unicode_literals

type("h")

Resultado:

<type 'unicode'>

Observe que usando from __future__ import, não precisamos prefixar cada string com u para tratá-la como um Unicode.

Use __future__ para divisão em Python

Nas versões Python 2.x, a divisão clássica é usada.

print(8 / 7)

Resultado

0

Uma divisão simples de 8 por 7 retorna 0 em Python 2.x.

O uso de from __future__ import division permite que um programa Python 2 use __truediv__().

Por exemplo,

from __future__ import division

print(8 / 7)

Resultado:

1.1428571428571428

Use __future__ para absolute_import em Python

No Python 2, você só poderia ter importações relativas implícitas, enquanto no Python 3, você pode ter importações explícitas ou absolutas. __future__ import absolute_import permite que o parêntese tenha várias instruções de importação entre colchetes.

Por exemplo,

from Tkinter import Tk, Frame, Button, Entry, Canvas, Text, LEFT, DISABLED, NORMAL, END

Observe que, sem o recurso __future__ import absolute_import, você não poderá incluir várias instruções import em uma linha de código.

Use __future__ para annotations em Python

Anotações são expressões Python associadas a diferentes partes de uma função.

Aqui, usando from __future__ import annotations, as alterações de como digitar as anotações são avaliadas em um módulo Python. Ele adia a avaliação das anotações e trata magicamente todas as anotações como anotações diferentes.

Por exemplo,

from __future__ import annotations


class C:
    @classmethod
    def make(cls) -> C:
        return cls

Observe que o código acima só funcionaria se __future__ import fosse escrito na parte superior do código, pois muda a forma como o Python interpreta o código, ou seja, trata as anotações como strings individuais.

Use __future__ para escopos aninhados

Com a adição de __future__ import nested_scopes, escopos estaticamente aninhados foram introduzidos no Python. Ele permite que os seguintes tipos de código sejam executados sem retornar um erro.

def h():
    ...

    def m(value):
        ...
        return m(value - 1) + 1

    ...

Observe que o código acima teria gerado um NameError antes do Python 2.1.

Use __future__ para geradores Python

Um gerador é uma função em Python definida como uma função regular. Ainda assim, ele faz isso com a palavra-chave “yield”, e não com o retorno, sempre que precisa gerar um valor específico.

Aqui, com o uso de from __future__ import generators, funções de gerador foram introduzidas para salvar estados entre chamadas de função sucessivas.

Por exemplo,

def gen():
    c, d = 0, 1
    while 1:
        yield d
        c, d = d, c + d

Use __future__ para a declaração with

Isso elimina o uso das instruções try...except adicionando a instrução with como uma palavra-chave em Python. É usado principalmente ao fazer E / S de arquivo, conforme mostrado no exemplo abaixo.

with open("workfile", "h") as a:
    read_data = a.read()