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» | |