Novos recursos do Python 3.8 e é hora de atualizar para o Python 2

Chegou 2020, o que significa que o Python 2 não é mais suportado . Para ser preciso, os principais desenvolvedores já pararam de trabalhar no ramo, e o lançamento da versão 2.7.18, dedicada à PyCon US em abril de 2020, marcará a interrupção completa de qualquer atividade relacionada ao Python 2.


Por outro lado, ocorreu o lançamento recente do Python 3.8, adicionando um pouco de açúcar sintático à linguagem. O Python 3.9, no entanto, ainda não é esperado em breve , e ainda não parece adicionar nada de interessante à linguagem.


Portanto, se você não abandonou repentinamente o Python 2, simplesmente não faz sentido puxá-lo: o suporte para a segunda versão já cessou e a mudança imediata para 3.8 permitirá que você use a linguagem em seu estado mais atual por um longo tempo.


Bem, para facilitar a decisão, a seguir é apresentada uma visão geral das principais inovações do Python 3.8, que serão úteis para todo pythonist.


1. Expressões de atribuição


Também conhecido como operador morsa, uma nova sintaxe que permite atribuir valores a variáveis ​​dentro de outra expressão. Esta é provavelmente a mais famosa e discutida das inovações da versão 3.8.


a = 6 #    b  a ** 2 #  ,  b > 0 if (b := a ** 2) > 0: print(f' {a}  {b}.') #  6  36. 

O objetivo de introduzir o operador é aumentar a legibilidade do código, portanto, usá-lo (como todos os outros operadores) não é necessário na primeira oportunidade, mas somente quando apropriado.


 #     a = 5 d = [b := a+1, a := b-1, a := a*2] 

2. Apenas argumentos posicionais


Funções podem receber dois tipos de argumentos.


  • Posicional - transmitido por posição
  • Nomeado - passado pelo nome

No código abaixo, os valores dos argumentos aeb podem ser passados ​​por posição e por nome.


 def my_func(a, b=1): return a+b my_func(5,2) #    my_func(a=5, b=2) #    

Na nova versão do Python, você pode limitar explicitamente quais parâmetros podem ser posicionais ou nomeados apenas usando os caracteres / e * na assinatura da função (no entanto, este último apareceu antes do Python 3.8).


No exemplo abaixo, os dois primeiros parâmetros aeb são apenas posicionais, c e d podem ser quaisquer, e os dois últimos eef devem ser nomeados.


 def my_func(a, b, /, c, d, *, e, f): return a+b+c+d+e+f my_func(1, 2, 3, 4, 5, 6) # : e, f    my_func(a=1, b=2, 3, 4, e=5, f=6) # : a, b    my_func(1, 2, c=3, 4, e=5, f=6) # returns 21 my_unc(1, 2, c=3, d=4, e=5, f=6) # returns 21 

Por que limitar a flexibilidade dos tipos de argumento? Em alguns casos, usar um nome de parâmetro em vez de sua posição será inútil e inapropriado. A restrição também evitará problemas se você planeja alterar os nomes dos argumentos posicionais no futuro.


3. linhas f 2.0


É difícil descrever em palavras o quão mais fácil e elegante a formatação das linhas f feita apareceu no Python 3.6.


É difícil de acreditar, mas o Python 3.8 conseguiu torná-los ainda mais convenientes. Adicionando o sinal = após o nome da variável que está sendo substituída, você pode exibir seu nome e seu valor sem duplicar o nome.


 pi = 3 #        print(f'pi={pi}') #     print(f'{pi=}') #      

A depuração com impressão será ainda mais conveniente :)


4. A ordem inversa das entradas do dicionário


A iteração sobre os dicionários agora pode ser feita ao contrário usando reversed () .


5. Obtendo Metadados de Outros Módulos


O novo módulo importlib.metadata permitirá obter metadados (por exemplo, versão) de pacotes de terceiros.


6. finalmente + continue


Anteriormente, você não podia usar a instrução continue por dentro, finalmente, devido à dificuldade em implementar esse recurso. Agora você pode.


 for i in range(2): try: print(i) finally: print('.') continue print('    .') # Python <= 3.7 >> SyntaxError: 'continue' not supported inside 'finally' clause # Python 3.8 >> 0 . 1 . 

Source: https://habr.com/ru/post/pt483276/


All Articles