Python 3.8

O Python 3.8.0 (final) foi lançado em 14 de outubro de 2019. Os recursos do 3.8 são definidos na PEP 569 e uma descrição detalhada das mudanças pode ser encontrada em What’s New in Python 3.8.

Recursos

Status

PEP 570

Argumentos somente posicionais

PEP 572

Expressões de Atribuição

Completo

PEP 574

Protocolo pickle 5 com dados out-of-band

PEP 578

Hooks de auditoria em tempo de execução

PEP 587

Configuração de Inicialização do Python

PEP 590

Vectorcall: um protocolo de chamada rápido para o CPython

Diversos

f-strings suportam = para expressões autodocumentadas e depuração

Completo

Outras Mudanças na Linguagem:

Uma instrução continue era ilegal na cláusula finally devido a um problema com a implementação. No Python 3.8 essa restrição foi removida

Completo

Os tipos bool, int e fractions.Fraction agora têm um método as_integer_ratio() como o encontrado em float e decimal.Decimal

Os construtores de int, float e complex agora usarão o método especial __index__(), se disponível, e o método correspondente __int__(), __float__() ou __complex__() não estiver disponível

Adicionado suporte a escapes N{name} em expressões regulares

Dicts e dictviews agora são iteráveis na ordem inversa de inserção usando reversed()

A sintaxe permitida para nomes de palavras-chave em chamadas de função foi ainda mais restringida. Em particular, f((keyword)=arg) não é mais permitido

O desempacotamento generalizado de iteráveis em instruções yield e return não exige mais parênteses ao redor

Quando uma vírgula é omitida em um código como [(10, 20) (30, 40)], o compilador exibe um SyntaxWarning com uma sugestão útil

Operações aritméticas entre subclasses de datetime.date ou datetime.datetime e objetos datetime.timedelta agora retornam uma instância da subclasse, em vez da classe base

Quando o interpretador Python é interrompido por Ctrl-C (SIGINT) e a exceção KeyboardInterrupt resultante não é capturada, o processo Python agora sai por meio de um sinal SIGINT ou com o código de saída correto, de modo que o processo chamador possa detectar que ele morreu devido a um Ctrl-C

Alguns estilos avançados de programação exigem a atualização do objeto types.CodeType de uma função existente

Para inteiros, a forma de três argumentos da função pow() agora permite que o expoente seja negativo no caso em que a base é relativamente prima em relação ao módulo

As compreensões de dict foram sincronizadas com os literais de dict, de modo que a chave é computada primeiro e o valor em segundo

O método object.__reduce__() agora pode retornar uma tupla com dois a seis elementos de comprimento

Mudanças nos módulos embutidos:

asyncio

asyncio.run() passou da API provisória para a estável

Completo

Executar python -m asyncio inicia um REPL assíncrono nativo

A exceção asyncio.CancelledError agora herda de BaseException em vez de Exception e não herda mais de concurrent.futures.CancelledError

Completo

Adicionado asyncio.Task.get_coro() para obter a corrotina encapsulada dentro de uma asyncio.Task

As tarefas asyncio agora podem ser nomeadas, seja passando o argumento de palavra-chave name para asyncio.create_task() ou o método de loop de eventos create_task(), ou chamando o método set_name() no objeto da tarefa

Adicionado suporte a Happy Eyeballs em asyncio.loop.create_connection(). Para especificar o comportamento, dois novos parâmetros foram adicionados: happy_eyeballs_delay e interleave.

gc

get_objects() agora pode receber um parâmetro generation opcional indicando uma geração da qual obter objetos. (Observe, no entanto, que embora gc seja embutido, get_objects() não está implementado no MicroPython)

math

Adicionada a nova função math.dist() para calcular a distância euclidiana entre dois pontos

Expandida a função math.hypot() para lidar com múltiplas dimensões

Adicionada a nova função math.prod(), como função análoga a sum(), que retorna o produto de um valor “start” (padrão: 1) por um iterável de números

Adicionadas duas novas funções combinatórias math.perm() e math.comb()

Adicionada uma nova função math.isqrt() para calcular raízes quadradas inteiras precisas sem conversão para ponto flutuante

A função math.factorial() não aceita mais argumentos que não sejam semelhantes a int

Completo

sys

Adicionada a nova função sys.unraisablehook() que pode ser substituída para controlar como as “exceções não levantáveis” são tratadas