Três recursos do Python 3 raramente usados ​​que todos devem conhecer



Python 3 já existe há algum tempo, e alguns desenvolvedores, especialmente aqueles que estão começando no Python, já estão usando esta versão da linguagem. Embora muitos dos novos recursos sejam amplamente usados, parece que alguns foram deixados para trás. Neste artigo, abordarei três dos recursos menos conhecidos, mas úteis. Eu os conheço de outras linguagens e eles tornam o Python 3 legal.



Este artigo é uma tradução de 3 recursos negligenciados no Python 3 que todos deveriam estar usando .



Enumerações



Eu usei muito enums em Java e Swift. Continuo a usá-los agora em Python.



Declarar uma enumeração em Python é muito fácil de fazer e era possível antes da versão 3 (embora com limitações):



from enum import Enum

class State(Enum):
  AIR = 0
  LAND = 1
  SEA = 2
  
myState = State.AIR

#  0
print(myState.value)
#  AIR
print(myState.name)


No código acima, a enumeração é introduzida declarando uma classe que herda de Enum. E então todos os estados necessários são simplesmente descritos. No meu caso: AIR, LANDe SEA.



Uma funcionalidade que foi adicionada ao Python 3 é a capacidade de usar .valuee .name. Eles permitem que você obtenha o número e a string correspondentes à enumeração.



Por exemplo, o valor de saída State.LAND.nameserá LAND.



Enums são úteis no código quando você deseja alguns identificadores textuais para constantes. Por exemplo, em vez de comparar um estado com 0 ou 1, é muito mais revelador comparar com State.MOVINGou State.STATIONARY. As constantes podem mudar e se alguém olhar para o código mais tarde, então a palavraMOVINGfornecerá muito mais compreensão do que 0. Como resultado, a legibilidade do código é bastante aumentada.



Mais informações podem ser encontradas na documentação oficial do Python 3 no Enum .



Formatação



Adicionado na versão 3.6, fstringsé uma ferramenta poderosa de formatação de texto. Eles permitem um código muito mais legível e sem erros (o que eu gosto depois de mudar do Java). Isso é melhor do que o formatusado anteriormente em Python. Aqui está um exemplo de uso format:



name = ''
blog_title = 'codeatcpp.com'

# ,          codeatcpp.com.
a = ",   {}       {}.".format(name, blog_title)


É fácil notar as chaves vazias dentro da string e após a lista com os nomes das variáveis ​​em uma ordem específica.



Agora, vamos examinar o mesmo código, mas usá-lo fstringé mais legível e muito semelhante à forma de formatação do Swift.



name = ''
blog_title = 'codeatcpp.com'

# ,          codeatcpp.com.
a = f",   {name}       {blog_title}."


Para obter uma string tão elegante, você só precisa colocar uma letra fantes das aspas e, em vez de colchetes vazios, você pode escrever imediatamente os nomes das variáveis ​​ou dados diretamente na string. Como as variáveis ​​são escritas diretamente em uma linha, não há necessidade de contar o número de elementos e acompanhar a ordem em que as variáveis ​​são colocadas no final. Eles estão certos onde seus valores são necessários.



Usá- fstringlo fornece mais legibilidade e facilidade de manutenção do código do que usar as abordagens clássicas.



Classes de dados



As classes de dados podem ser um tópico mais confuso do que os anteriores, por isso exigirá um pouco mais de explicação. Classes de dados são algo que eu realmente gosto no Kotlin, então adoro usá-las em Python também.



Uma classe de dados é uma classe cujo único propósito é armazenar dados. A classe contém variáveis ​​que podem ser lidas e escritas, mas não tem lógica adicional.



Imagine que você tem um programa no qual precisa passar uma string e uma matriz de números entre classes diferentes. Você pode ter métodos como pass(str, arr), mas é muito mais conveniente fazer uma classe que contenha uma string e uma matriz como os únicos membros da classe.



Usar uma classe de dados mostra melhor o que você está tentando fazer e também torna mais fácil criar testes de unidade.



O exemplo abaixo mostra uma classe de dados simples que é um vetor 3D, mas pode ser facilmente estendida para representar qualquer combinação de dados diferentes:



from dataclasses import dataclass

#   
@dataclass
class Vector3D:
    x: int
    y: int
    z: int
      
#  
u = Vector3D(1,1,-1)

# : Vector3D(x=1, y=1, z=-1)
print(u)


É fácil ver aqui que a definição de uma classe de dados é muito semelhante à definição de uma classe regular, exceto que um decorador é usado @dataclasse cada campo é definido como : .



Embora a funcionalidade do criado seja Vector3Dmuito limitada, o objetivo de usar a classe de dados é aumentar a eficiência e reduzir o número de erros no código. É muito melhor passar como um parâmetro do Vector3Dque um conjunto de variáveis ​​de tipo int.



Mais informações sobre o decorador @dataclasspodem ser encontradas na documentação oficial do Python 3 .



Conclusão



Deixe-me saber nos comentários o quanto você gosta dessas possibilidades. Será interessante ouvir sobre novos cenários para seu uso. Boa codificação!



All Articles