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 |
|
Argumentos somente posicionais |
||
Expressões de Atribuição |
Completo |
|
Protocolo pickle 5 com dados out-of-band |
||
Hooks de auditoria em tempo de execução |
||
Configuração de Inicialização do Python |
||
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.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. |
|
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) |
|
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 |
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 |
|