Skip to content

Instantly share code, notes, and snippets.

@NaelsonDouglas
Created February 17, 2021 05:51
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save NaelsonDouglas/b4b45b493efb12e94d7f23160bfd4872 to your computer and use it in GitHub Desktop.
Save NaelsonDouglas/b4b45b493efb12e94d7f23160bfd4872 to your computer and use it in GitHub Desktop.

Smells comuns em Python

usar range(len(a)) ao invés de enumerate
Com smell Sem smell
names = ["a", "b", "c"]

for i in range(len(names)):
    print(f'The name is {names[i]} and the index is {i}')
names = ["a", "b", "c"]

for i, name in enumerate(names):
    print(f'The name is {name} and the index is {i}')
Usar list comprehensions para alterar estados, mas sem alterar a própria lista
funcionarios = ['joão', 'josé', 'marcos']
[s.pagar(i) for i in funcionarios]
funcionarios = ['joão', 'josé', 'marcos']
map(s.pagar, funcionarios)

Ou usar loop, caso map não seja aplicável

funcionarios = [joão, josé, marcos]
for funcionario in funcionarios:
        funcionario.pagar()
List comprehension aninhadas
list = [[1,2,3],[-1,-5,6]]
flatten = [item
           for sublist in list
           for item in sublist
           if item > 0]
flatten = []
for rows in list:
    for sublist in rows:
        if len(sublist) > 0:
           flatten.append(sublist)
Gerar list comprehensions sem L-value (ou seja, uma lista que você não vai usar)
values = [1,2,3,4,5,6]
[do_something(val) for val in values]
values = [1,2,3,4,5,6]
for val in values:
        do_something(val)

Ou usar map, para ser mais pythonic:

values = [1,2,3,4,5,6]
map(do_something,values)
Long param list (kwargs é moda aqui)
def deslocar(self,x,y,z,velocidade,sentido,angulo):
    self.foo(x,y,z,velocidade)
    self.bar(velocidade,sentido)
    self.foobar(sentido,rotacao)
def deslocar(self,coords,velocidade,direcao):
    self.foo(coords,velocidade)
    self.bar(velocidade,direcao.sentido)
    self.foobar(direcao)
Usar loops em dataframes
df = pd.read_csv('alunos.csv')
df
| nome  | nota |
|-------|------|
| João  | 10   |
| José  | 6    |
| Maria | 3    |

aprovacoes = []
for i in range(0,len(df)):
    ta_aprovado = df.iloc[i]['notas'] >= 7
    aprovacoes.append(ta_aprovado)
df['aprovado'] = aprovacoes

df
| nome  | nota | aprovado |
|-------|------|----------|
| João  | 10   | True     |
| José  | 6    | False    |
| Maria | 3    | False    |
df = pd.read_csv('alunos.csv')

aprovacoes = []
for _, row in df.iterrows():
    ta_aprovado = row['notas'] >= 7
    aprovacoes.append(ta_aprovado)
df['aprovado'] = aprovacoes

Ainda melhor:

df['notas'] = df.apply(lambda row: row['notas'] >= 7,axis='columns')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment