Image for post

O Python vem sofrendo updates frequentes melhorando ainda mais o seu uso, famoso por ser simples e fácil de programas o Python chega com novidades atraentes para a comunidade. Abaixo vamos mostrar algumas das novidades.

1 – Novo Operador para Dicionários

Agora é possível realizar a concatenação de dicionários apenas usando os operadores pipe (|) e para atualização a utilização do pipe igual (|=), essas operações estão disponíveis apenas para dicionários, espera-se que no futuro esses operadores sirvam para outros tipos. Veja PEP 584 para uma descrição completa. (Contribuição de Brandt Bucher em bpo-36144.)

>>> d = {'spam': 1, 'eggs': 2, 'cheese': 3}
>>> e = {'cheese': 'cheddar', 'aardvark': 'Ethel'}
>>> d | e
{'spam': 1, 'eggs': 2, 'cheese': 'cheddar', 'aardvark': 'Ethel'}

2 – PEP 616: Novos métodos de string removeprefix() e removesuffix()

Com esses novos métodos você conseguirá facilmente remover partes da strings, seja ele um prefixo ou um sufixo. Os métodos correspondentes bytes, bytearray e collections.UserString também foram adicionados. Veja PEP 616 para uma descrição completa.

>>> "HelloWord".removeprefix("Hello")
"Word"
>>> "HelloWord".removesuffix("Word")
"Hello"

3 – Tipos genéricos embutidos

Uma das mudanças que veio para ficar, agora, nas anotações de tipo, você pode usar tipos de coleção embutidos como list e dict como tipos genéricos, em vez de importar os tipos de letras maiúsculas correspondentes (por exemplo, List ou Dict) digitando. Agora, outros tipos na biblioteca padrão também são genéricos, por exemplo, queue.Queue.

def greet_all(names: list[str]) -> None: 
    for name in names: 
        print("Hello", name)

4 – PEP 617: Novo analisador ( Parser )

O Python 3.9 usa um novo analisador, baseado em GASE em vez de LL(1). O desempenho do novo analisador é aproximadamente comparável ao do analisador antigo, mas o formalismo do GASE é mais flexível que do LL(1) quando se trata de projetar novos recursos de linguagem. Essa flexibilidade será exigida no Python 3.10 e posterior. Na versão 3.10, o analisador antigo será excluído e todas as funcionalidades que dependem dele (principalmente o módulo parser, que foi descontinuado a muito tempo). No Python 3.9 apenas, você pode voltar ao analisador LL(1) usando uma opção de linha de comando (-X oldparser) ou uma variável de ambiente (PYTHONOLDPARSER=1).

5 – Otimizações

Otimizado o idioma para atribuição de uma variável temporária nas compreensões. Agora for y in [expr] nas compreensões é tão rápido quanto uma atribuição simples y = expr. Por exemplo:sums = [s for s in [0] for x in data for s in [s + x]]Ao contrário do operador :=, este idioma não vaza uma variável para o escopo externo.(Contribuição de Serhiy Storchaka em bpo-32856.)

Otimiza a manipulação de sinais em aplicações multithread. Se uma thread diferente da thread principal obtiver um sinal, o loop de avaliação do bytecode não será mais interrompido a cada instrução de bytecode para verificar se há sinais pendentes que não podem ser manipulados. Somente o segmento principal do interpretador principal pode manipular sinais. Anteriormente, o loop de avaliação do bytecode era interrompido em cada instrução até que a thread principal lidasse com os sinais. (Contribuição de Victor Stinner em bpo-40010.)

Otimiza o módulo subprocess no FreeBSD usando closefrom(). (Contribuição de Ed Maste, Conrad Meyer, Kyle Evans, Kubilay Kocak e Victor Stinner em bpo-38061.)

Aqui está um resumo das melhorias de desempenho do Python 3.4 ao Python 3.9:

Estes resultados foram gerados a partir do script de benchmark de acesso variável em: Tools/scripts/var_access_benchmark.py. O script de benchmark exibe tempos em nanossegundos. Os benchmarks foram medidos em um processador Intel® Core ™ i7-4960HQ ( https://ark.intel.com/content/www/us/en/ark/products/76088/intel-core-i7-4960hq-processor-6m-cache-up-to-3-80-ghz.html) executando as compilações do macOS de 64 bits encontradas em python.org.

Leave a Reply