Python 3.9¶
O Python 3.9.0 (final) foi lançado em 5 de outubro de 2020. Os recursos do 3.9 são definidos na PEP 596 e uma descrição detalhada das mudanças pode ser encontrada em What’s New in Python 3.9
Recursos |
Status |
|
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] |
|
Type hinting de genéricos em coleções padrão |
||
Anotações flexíveis de funções e variáveis |
||
O CPython adota um ciclo de lançamento anual. Em vez de anual, busca-se um ciclo de lançamento de dois meses |
Não relevante |
|
Restrições gramaticais relaxadas em decoradores |
||
O Banco de Dados de Fusos Horários da IANA agora está presente na biblioteca padrão no módulo zoneinfo |
||
Métodos de string para remover prefixos e sufixos |
||
O CPython agora usa um novo parser baseado em PEG |
Não relevante |
Outras Mudanças na Linguagem:
__import__() agora levanta ImportError em vez de ValueError |
Completo |
O Python agora obtém o caminho absoluto do nome do arquivo de script especificado na linha de comando (ex: python3 script.py): o atributo __file__ do módulo __main__ passou a ser um caminho absoluto, em vez de um caminho relativo |
|
Por padrão, para melhor desempenho, o argumento errors é verificado apenas no primeiro erro de codificação/decodificação, e o argumento encoding às vezes é ignorado para strings vazias |
|
“”.replace(“”, s, n) agora retorna s em vez de uma string vazia para todos os n diferentes de zero. Agora é consistente com “”.replace(“”, s) |
|
Qualquer expressão válida agora pode 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 agora reflete o status real de execução do gerador assíncrono |
|
Erros inesperados ao chamar o método __iter__ não são mais mascarados por TypeError no operador in e nas funções contains(), indexOf() e countOf() do módulo operator |
|
Expressões lambda sem parênteses não podem mais ser a parte da expressão em uma cláusula if em compreensões e expressões geradoras |
Mudanças nos módulos embutidos:
Devido a preocupações significativas de segurança, o parâmetro reuse_address de asyncio.loop.create_datagram_endpoint() não é mais suportado |
|
Adicionada uma nova corrotina shutdown_default_executor() que agenda um desligamento para o executor padrão, aguardando o ThreadPoolExecutor terminar de fechar. Além disso, asyncio.run() foi atualizado para usar a nova corrotina. |
|
Adicionado asyncio.PidfdChildWatcher, uma implementação de child watcher específica do Linux que faz polling de descritores de arquivo de processos |
|
adicionada uma nova coroutine asyncio.to_thread() |
|
Ao cancelar a tarefa devido a um timeout, asyncio.wait_for() agora aguardará até que o cancelamento seja concluído também no caso em que o timeout é <= 0, assim como faz com timeouts positivos |
|
asyncio agora levanta TyperError ao chamar métodos incompatíveis com um socket ssl.SSLSocket |
|
A coleta de lixo não bloqueia em objetos ressuscitados |
|
Adicionada uma nova função gc.is_finalized() para verificar se um objeto foi finalizado pelo coletor de lixo |
|
Expandida a função math.gcd() para lidar com múltiplos argumentos. Anteriormente, ela 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 ponto flutuante após x em direção a y |
|
Adicionado math.ulp(): retorna o valor do bit menos significativo de um float |
|
Expostos os os.pidfd_open() e os.P_PIDFD específicos do Linux |
|
A função os.unsetenv() agora também está disponível no Windows |
Completo |
As funções os.putenv() e os.unsetenv() agora estão sempre disponíveis |
Completo |
Adicionada a função os.waitstatus_to_exitcode(): converte um status de espera em um código de saída |
|
Adicionado um novo método random.Random.randbytes: gera bytes aleatórios |
|
Adicionado um novo atributo sys.platlibdir: nome do diretório de biblioteca específico da plataforma |
|
Anteriormente, sys.stderr era bufferizado por bloco quando não interativo. Agora o stderr, por padrão, é sempre bufferizado por linha |
|
Notas