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