paint-brush
11 dicas e truques para escrever um código Python melhorby@pragativerma
2,227
2,227

11 dicas e truques para escrever um código Python melhor

Pragati Verma8m2022/08/16
Read on Terminal Reader
Read this story w/o Javascript

Python geralmente usa um loop `for` para iterar sobre um objeto iterável. Mas há uma maneira mais fácil e pythônica de fazer isso usando `enumerate() em vez de um loop 'for'. A compreensão da lista em vez dos loops for brutos é uma maneira de criar listas com base nas listas existentes. Ele pode ser usado para classificar os elementos em uma lista ou sequência classificada (tupla, conjunto, conjunto congelado) ou coleção (conjunto congelado) A sintaxe de uma compreensão de lista se parece com isto: 'HackerNoon'

Companies Mentioned

Mention Thumbnail
Mention Thumbnail
featured image - 11 dicas e truques para escrever um código Python melhor
Pragati Verma HackerNoon profile picture


Aqui estão 11 dicas e truques que ajudarão você a escrever um código Python melhor e a se tornar um programador melhor:


1. Iterar com enumerate ou range(len(x))

Em Python, geralmente usamos um loop for para iterar sobre um objeto iterável. Um loop for em Python usa iteração baseada em coleção, ou seja, Python atribui o próximo item de um iterável à variável de loop em cada iteração. O caso de uso usual de um loop for é o seguinte:


 values = ["a", "b", "c"] for value in values: print(value) # a # b # c


Agora, se além do valor você quiser imprimir o índice também, pode fazer assim:


 index = 0 for value in values: print(index, value) index += 1 # 0 a # 1 b # 2 c


ou outra maneira comum de fazer isso é usando range(len(x)) :


 for index in range(len(values)): value = values[index] print(index, value) # 0 a # 1 b # 2 c


No entanto, há uma maneira mais fácil e pythônica de iterar sobre objetos iteráveis usando enumerate() . Ele é usado em um loop for quase da mesma maneira que você usa da maneira usual, mas em vez de colocar o objeto iterável diretamente depois in loop for , ou colocá-lo como range(len(values)) , você o coloca dentro os parênteses de enumerate() como mostrado abaixo:


 for count, value in enumerate(values): print(count, value) # 0 a # 1 b # 2 c


Também podemos definir um argumento start para enumerate() conforme mostrado abaixo:


 for count, value in enumerate(values, start=1): print(count, value) # 1 a # 2 b # 3 c


A função enumerate() retorna duas variáveis:

  • a contagem da iteração atual
  • o valor do item na iteração atual


Assim como as variáveis de loop em um loop for , as variáveis de loop podem ter qualquer nome, por exemplo, podemos chamá-las de index e value e elas ainda funcionarão. enumerate() é mais eficiente que um loop for , pois evita que você tenha que lembrar de acessar o valor dentro do loop e usá-lo corretamente e também lembrar de avançar o valor da variável do loop, tudo é tratado automaticamente pelo Python .


2. Use compreensão de lista em vez de loops for brutos

A compreensão da lista é uma maneira mais fácil e elegante de definir e criar listas com base nas listas existentes. Eles são apenas uma única linha de código que consiste em colchetes contendo a expressão que é executada repetidamente a cada iteração. Portanto, eles são mais eficientes em tempo e espaço do que loops e transformam instruções iterativas em uma única linha de código.


A sintaxe usual de uma compreensão de lista é assim:


 newList = [ expression(element) for element in oldList if condition ]


Aqui está um exemplo de compreensão de lista no código:


 # Using list comprehension to iterate through loop List = [character for character in 'HackerNoon'] # Displaying list print(List) # Output # ['H', 'a', 'c', 'k', 'e', 'r', 'N', 'o', 'o', 'n']


3. Ordene iteráveis complexos com sorted()

A função sorted() do Python classifica os elementos de um objeto iterável em uma ordem específica (crescente ou decrescente) e os retorna como uma lista classificada. Ele pode ser usado para classificar uma sequência (string, tupla, lista) ou coleção (conjunto, dicionário, conjunto congelado) ou qualquer outro iterador.


A sintaxe da função sorted() é a seguinte:


 sorted(iterable, key=None, reverse=False)


A função sorted() leva no máximo três parâmetros:

  • iterável: pode ser qualquer iterador
  • chave: É um argumento opcional que serve como chave para comparação de classificação.
  • reverse: também é um argumento opcional usado para especificar uma lista de classificação reversa como saída


4. Armazene valores únicos com Conjuntos

Um Python Set armazena uma única cópia dos valores duplicados nele. Portanto, pode ser usado para verificar valores exclusivos em uma lista. Por exemplo:


 list_inp = [100, 75, 100, 20, 75, 12, 75, 25] set_res = set(list_inp) print("The unique elements of the input list using set():\n") list_res = (list(set_res)) for item in list_res: print(item)


Portanto, a saída do programa acima ficaria assim:


 The unique elements of the input list using set(): 25 75 100 20 12


5. Economize memória com geradores

A função básica do gerador é avaliar os elementos sob demanda. É muito semelhante à sintaxe para compreensão de lista, onde em vez de colchetes, usamos parênteses.


Vamos considerar um exemplo onde queremos imprimir o quadrado de todos os números pares em uma lista:


 myList = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] print("The given list is:", myList) mygen = (element ** 2 for element in myList if element % 2 == 0) print("Elements obtained from the generator are:") for ele in mygen: print(ele)


A saída do código acima ficaria assim:


 The given list is: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] Elements obtained from the generator are: 4 16 36 64 100


Tendo dito que a sintaxe deles é bastante semelhante à compreensão de lista, você deve estar se perguntando como ela é diferente da compreensão de lista ou conjunto. Ao contrário da compreensão de lista ou conjunto, a compreensão do gerador não inicializa nenhum objeto. Como resultado, você pode utilizar a compreensão do gerador em vez de listar ou definir a compreensão para reduzir os requisitos de memória do programa.


6. Defina os valores padrão nos dicionários com .get() e .setdefault()


O método .setdefault() permite definir dict[key]=default se a chave ainda não estiver no dict.


A sintaxe de .setdefault() se parece com o seguinte:


 dict.setdefault(key, default=None)


Aqui está um trecho de código de exemplo para entender como usar .setdefault() :


 a_dictionary = {"a": 1, "b": 2, "d": 4} a_dictionary.setdefault("c", 3) print(a_dictionary)


A saída do código acima ficaria assim:


 {'a': 1, 'b': 2, 'd': 4, 'c': 3}


A mesma coisa também pode ser obtida usando o método .get() passando um valor padrão para a chave, como você pode ver abaixo:


 a_dictionary = {"a": 1, "b": 2, "d": 4} print(a_dictionary.get("c", 3)) print(a_dictionary)


A saída do código acima ficaria assim:


 3 {'a': 1, 'b': 2, 'd': 4}


7. Conte objetos com hash com collections.Counter

O módulo Collections oferece suporte a tipos de dados contêineres de alto desempenho (além da lista de tipos incorporada, dict e tupla) e contém uma variedade de estruturas de dados úteis para armazenar informações na memória.


Um contador é um contêiner que controla o número de vezes que valores iguais são adicionados.

Ele pode ser usado para implementar os mesmos algoritmos que outras linguagens empregam estruturas de dados bag ou multiset para implementar.


As coleções de importação disponibilizam o material nas coleções como:

 import collections


Como vamos usar apenas o Counter, podemos simplesmente fazer isso:


 from collections import Counter


Pode ser usado da seguinte forma:


 import collections c = collections.Counter('abcdaab') for letter in 'abcde': print '%s : %d' % (letter, c[letter])


A saída do código acima ficaria assim:


 a : 3 b : 2 c : 1 d : 1 e : 0


8. Formatar strings com f-Strings (Python 3.6+)

f-strings, também chamadas de “literais de string formatadas“, são uma maneira nova e mais pythônica de formatar strings, suportada pelo Python 3.6+. Eles são uma maneira mais rápida, mais legível, mais concisa e menos propensa a erros de formatação de strings em Python.


Como o nome “f-string” diz, são strings literais que possuem um f no início e chaves contendo expressões que serão substituídas por seus valores em tempo de execução e depois formatadas usando o protocolo __format__ .


F-strings podem ser usadas da seguinte forma:


 name = "Eric" age = 74 print(f"Hello, {name}. You are {age}.") # 'Hello, Eric. You are 74.'


9. Concatenar strings com .join()

Em Python, podemos usar o método .join() para concatenar uma lista de strings em uma única string. A sintaxe usual para este método é a seguinte:


 'String to insert'.join([List of strings])


Ele pode ser usado de várias maneiras -- se você usar a string vazia ““ , [List of strings] é simplesmente concatenada, e se você usar uma vírgula, uma string delimitada por vírgula é criada. Quando o caractere de nova linha \n é usado, uma nova linha é acrescentada após cada string. Veja o exemplo abaixo:


 l = ['aaa', 'bbb', 'ccc'] s = ''.join(l) print(s) # aaabbbccc s = ','.join(l) print(s) # aaa,bbb,ccc s = '-'.join(l) print(s) # aaa-bbb-ccc s = '\n'.join(l) print(s) # aaa # bbb # ccc


10. Mesclar dicionários com {**d1, **d2} (Python 3.5+)

A maneira mais fácil de mesclar dicionários é usando o operador de descompactação ( ** ). A sintaxe desse método se parece com isso:


 {**dict1, **dict2, **dict3}


Veja um exemplo para entender melhor esse método:


 d1 = {'k1': 1, 'k2': 2} d2 = {'k3': 3, 'k4': 4} print({**d1, **d2}) # {'k1': 1, 'k2': 2, 'k3': 3, 'k4': 4}


11. Simplifique as instruções if com if x in list

Suponha que temos uma lista com as cores primárias vermelho, verde e azul. E em algum lugar do nosso código, temos uma nova variável com uma cor, então c = vermelho. Depois veremos se esta é uma das nossas cores primárias. Claro, podemos comparar isso com cada item da nossa lista da seguinte maneira:


 colors = ["red", "green", "blue"] c = "red" # cumbersome and error-prone if c == "red" or c == "green" or c == "blue": print("is main color")


No entanto, isso pode consumir muito tempo e podemos facilmente cometer erros, como se tivéssemos um erro de digitação aqui para vermelho. É mais simples e preferível usar apenas a expressão if x in list:


 colors = ["red", "green", "blue"] c = "red" # better: if c in colors: print("is main color")


Conclusão

Python é uma linguagem de programação amplamente usada e, usando as dicas e truques acima, você pode se tornar um programador Python melhor.


Espero que este artigo tenha sido útil. Continue lendo!