Python 3.8¶
O Python 3.8.0 (final) foi lançado a 14 de outubro de 2019. As funcionalidades para 3.8 estão definidas em PEP 569 e uma descrição detalhada das alterações pode ser encontrada em What’s New in Python 3.8.
Funcionalidades |
Estado |
|
Argumentos exclusivamente posicionais |
||
Expressões de Atribuição |
Completo |
|
Protocolo pickle 5 com dados fora de banda |
||
Hooks de auditoria em tempo de execução |
||
Configuração de Inicialização do Python |
||
Vectorcall: um protocolo de chamada rápida para CPython |
||
Diversos |
||
As f-strings suportam = para expressões autodocumentadas e depuração |
Completo |
|
Outras Alterações de Linguagem:
Uma instrução continue era ilegal na cláusula finally devido a um problema de implementação. No Python 3.8 esta restrição foi levantada |
Completo |
Os tipos bool, int e fractions.Fraction têm agora um método as_integer_ratio() semelhante ao encontrado em float e decimal.Decimal |
|
Os construtores de int, float e complex utilizarão agora 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 |
|
Dict e dictviews são agora iteráveis em ordem de inserção invertida usando reversed() |
|
A sintaxe permitida para nomes de palavras-chave em chamadas de funções foi ainda mais restringida. Em particular, f((keyword)=arg) já não é permitido |
|
O desempacotamento iterável generalizado em instruções yield e return já não requer parênteses circundantes |
|
Quando falta uma vírgula em código como [(10, 20) (30, 40)], o compilador apresenta um SyntaxWarning com uma sugestão útil |
|
As operações aritméticas entre subclasses de datetime.date ou datetime.datetime e objetos datetime.timedelta retornam agora 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 sai agora através de um sinal SIGINT ou com o código de saída correto para que o processo chamador possa detetar que terminou devido a um Ctrl-C |
|
Alguns estilos avançados de programação requerem a atualização do objeto types.CodeType de uma função existente |
|
Para inteiros, a forma de três argumentos da função pow() permite agora que o expoente seja negativo no caso em que a base é relativamente prima ao módulo |
|
As compreensões de dict foram sincronizadas com os literais dict de forma a que a chave seja calculada primeiro e o valor em segundo |
|
O método object.__reduce__() pode agora retornar um tuplo de dois a seis elementos |
Alterações nos módulos incorporados:
asyncio.run() passou da API provisional para a API estável |
Completo |
Executar python -m asyncio lança um REPL nativamente assíncrono |
|
A exceção asyncio.CancelledError herda agora de BaseException em vez de Exception e já não herda de concurrent.futures.CancelledError |
Completo |
Adicionado asyncio.Task.get_coro() para obter a corrotina encapsulada dentro de uma asyncio.Task |
|
As tarefas Asyncio podem agora ser nomeadas, passando o argumento de palavra-chave name a asyncio.create_task() ou ao método create_task() do ciclo de eventos, ou chamando o método set_name() no objeto de tarefa |
|
Adicionado suporte a Happy Eyeballs em asyncio.loop.create_connection(). Para especificar o comportamento, foram adicionados dois novos parâmetros: happy_eyeballs_delay e interleave. |
|
get_objects() pode agora receber um parâmetro opcional generation indicando uma geração da qual obter objetos. (Note, porém, que embora gc seja incorporado, get_objects() não está implementado para MicroPython) |
|
Adicionada nova função math.dist() para calcular a distância euclidiana entre dois pontos |
|
Expandida a função math.hypot() para suportar múltiplas dimensões |
|
Adicionada nova função math.prod(), como função análoga a sum() que retorna o produto de um valor «inicial» (predefinição: 1) multiplicado por um iterável de números |
|
Adicionadas duas novas funções combinatórias math.perm() e math.comb() |
|
Adicionada nova função math.isqrt() para calcular raízes quadradas inteiras exatas sem conversão para vírgula flutuante |
|
A função math.factorial() já não aceita argumentos que não sejam semelhantes a int |
Completo |
Adicionada nova função sys.unraisablehook() que pode ser substituída para controlar como são tratadas as «exceções não levantáveis» |
|