Python 3.9¶
O Python 3.9.0 (final) foi lançado a 5 de outubro de 2020. As funcionalidades para 3.9 estão definidas em PEP 596 e uma descrição detalhada das alterações pode ser encontrada em What’s New in Python 3.9
Funcionalidades | Estado | |
Acesso rápido ao estado do módulo a partir de métodos de tipos de extensão C | Não relevante | |
Operadores de união adicionados ao dict | Completo [1] | |
Dicas de tipo genéricas em coleções standard | ||
Anotações flexíveis de funções e variáveis | ||
CPython adota um ciclo de lançamento anual. Em vez de anual, o objetivo é um ciclo de lançamento de dois meses | Não relevante | |
Restrições gramaticais relaxadas nos decoradores | ||
A Base de Dados de Fusos Horários IANA está agora presente na biblioteca standard no módulo zoneinfo | ||
Métodos de string para remover prefixos e sufixos | ||
CPython utiliza agora um novo analisador baseado em PEG | Não relevante |
Outras Alterações de Linguagem:
__import__() lança agora ImportError em vez de ValueError | Completo |
Python obtém agora o caminho absoluto do nome do ficheiro de script especificado na linha de comandos (ex: python3 script.py): o atributo __file__ do módulo __main__ passou a ser um caminho absoluto, em vez de um caminho relativo | |
Por predefinição, para melhor desempenho, o argumento errors só é verificado no primeiro erro de codificação/descodificação e o argumento encoding é por vezes ignorado para strings vazias | |
«».replace(«», s, n) retorna agora s em vez de uma string vazia para todos os n diferentes de zero. É agora consistente com «».replace(«», s) | |
Qualquer expressão válida pode agora ser usada como decorador. Anteriormente, a gramática era muito mais restritiva | |
A execução paralela de aclose() / asend() / athrow() é agora proibida, e ag_running reflete agora o estado de execução real do gerador assíncrono | |
Erros inesperados ao chamar o método __iter__ já não são mascarados por TypeError no operador in e nas funções contains(), indexOf() e countOf() do módulo operator | |
As expressões lambda sem parênteses já não podem ser a parte de expressão numa cláusula if em compreensões e expressões geradoras |
Alterações nos módulos incorporados:
Devido a preocupações de segurança significativas, o parâmetro reuse_address de asyncio.loop.create_datagram_endpoint() já não é suportado | |
Adicionada uma nova corrotina shutdown_default_executor() que agenda o encerramento do executor predefinido aguardando que o ThreadPoolExecutor termine de fechar. Além disso, asyncio.run() foi atualizado para usar a nova corrotina. | |
Adicionado asyncio.PidfdChildWatcher, uma implementação de observador de processos filho específica do Linux que monitoriza descritores de ficheiro de processos | |
adicionada uma nova corrotina asyncio.to_thread() | |
Ao cancelar a tarefa devido a um timeout, asyncio.wait_for() aguardará agora até que o cancelamento esteja completo também no caso em que o timeout é <= 0, tal como faz com timeouts positivos | |
asyncio lança agora TyperError ao chamar métodos incompatíveis com um socket ssl.SSLSocket | |
A recolha de lixo não bloqueia em objetos ressuscitados | |
Adicionada nova função gc.is_finalized() para verificar se um objeto foi finalizado pelo coletor de lixo | |
Expandida a função math.gcd() para suportar múltiplos argumentos. Anteriormente, suportava apenas dois argumentos | |
Adicionado math.lcm(): retorna o mínimo múltiplo comum dos argumentos especificados | |
Adicionado math.nextafter(): retorna o próximo valor de vírgula flutuante após x em direção a y | |
Adicionado math.ulp(): retorna o valor do bit menos significativo de um float | |
Exposto o os.pidfd_open() e os.P_PIDFD específicos do Linux | |
A função os.unsetenv() está agora também disponível no Windows | Completo |
As funções os.putenv() e os.unsetenv() estão agora sempre disponíveis | Completo |
Adicionada função os.waitstatus_to_exitcode(): converte um estado de espera num código de saída | |
Adicionado novo método random.Random.randbytes: gerar bytes aleatórios | |
Adicionado novo atributo sys.platlibdir: nome do diretório de biblioteca específico da plataforma | |
Anteriormente, sys.stderr era armazenado em buffer de bloco quando não interativo. Agora stderr usa por predefinição sempre armazenamento em buffer de linha | |
Notas