DEV Community

jrezzende
jrezzende

Posted on

Python: Dicas e Truques.

A ideia deste post é ser o ponto de partida para a série - Python: Dicas e Truques -, onde eu possa compartilhar conteúdos relativos a Python que possam agregar a quem ler.

Como esse é meu primeiro post no dev.to, seguindo a tradição, vou fazer uma breve apresentação sobre mim aqui.

Me chamo João Rezende, tenho 23 anos e escrevo de Florianópolis/SC. Tenho contato com desenvolvimento há cerca de 3 anos, trabalhando efetivamente como um desenvolvedor há 2 anos.

Tenho grande interesse por backend, onde possuo um carinho maior por Python, JavaScript (principais ferramentas do meu dia a dia) e Golang, que tenho estudado como um hobby.

Vamos às dicas e truques:

1. Troca de valores entre variáveis:

x, y = 1, 2
x, y = y, x

print(x)
>>> 2
print(y)
>>> 1
Enter fullscreen mode Exit fullscreen mode

2. Comparação encadeada:

x = 10

print(5 < x < 15)
>>> True
print(1 < x < 9)
>>> False
Enter fullscreen mode Exit fullscreen mode

3. Atribuição de múltiplos valores:

x, y, z = 10, 20, 30

print(x, y, z)
>>> 10 20 30
Enter fullscreen mode Exit fullscreen mode

4. Atribuição de múltiplos valores com empacotamento de listas:

x, *y, z = 10, 20, 30, 40, 50

print(x, y, z)
>>> 10 [20, 30, 40] 50
Enter fullscreen mode Exit fullscreen mode

5. Remover valores repetidos em uma lista:

x = [1, 2, 2, 3, 3, 4, 5]
y = list(set(x))

print(y)
>>> [1, 2, 3, 4, 5]
Enter fullscreen mode Exit fullscreen mode

6. Agrupamento de dicionários por desempacotamento:

x = {'a': 1, 'b': 2}
y = {'c': 3, 'd': 4}
z = {**x, **z}

print(z)
>>> {'a': 1, 'b': 2, 'c': 3, 'd': 4}
Enter fullscreen mode Exit fullscreen mode

7. Agrupamento de elementos de sequências arbitrárias:

x = [1, 2, 3]
y = ('a', 'b', 'c')
z = zip(x, y)

print(z)
>>> <zip at 0x2168c952d48>
print(list(z))
>>> [(1, 'a'), (2, 'b'), (3, 'c')]
Enter fullscreen mode Exit fullscreen mode

8. Converter duas listas em um dicionário:

x = ['a', 'b', 'c']
y = [1, 2, 3]
z = dict(zip(x, y))

print(z)
>>> {'a': 1, 'b': 2, 'c': 3}
Enter fullscreen mode Exit fullscreen mode

9. Iterar por uma sequência mantendo controle de índice:

for index, item in enumerate(['a', 'b', 'c']):
    print('indice em lista:', index, 'item:', item)

>>> indice em lista: 0 item: a
>>> indice em lista: 1 item: b
>>> indice em lista: 2 item: c
Enter fullscreen mode Exit fullscreen mode

10. Simulando switch-case statements com dictionary dispatch:

def switch_simul(op, x=1 ,y=2):
    return {
        'add' : lambda: x + y,
        'sub' : lambda: x - y,
        'mul' : lambda: x * y,
        'div' : lambda: x / y,
    }.get(op, lambda: None)()

print(switch_simul('add'))
>>> 3
print(switch_simul('sub'))
>>> -1
Enter fullscreen mode Exit fullscreen mode

11. Operações em lista (list comprehension, map, filter):

Python oferece uma maneira concisa de expressar for loops, chamada list comprehension.

For loop convencional:

multiplied_nums = []
for num in [1, 2, 3]:
    multiplied_nums.append(num*2)

print(a)
>>> [2, 4, 6]
Enter fullscreen mode Exit fullscreen mode

Mesma expressão, utilizando list comprehension:

multiplied_nums = [num * 2 for num in [1, 2, 3]]

print(a)
>>> [2, 4, 6]
Enter fullscreen mode Exit fullscreen mode

Map:

mult_by_2 = lambda x: x * 2, [1, 2,3]
vals = map(fn, [1, 2, 3])

print(list(vals))
>>> [2, 4, 6]
Enter fullscreen mode Exit fullscreen mode

Equivalente a map, via list comprehension:

mult_by_2 = lambda x: x * 2
a = [mult_by_2(x) for x in [1, 2, 3]]

print(a)
>>> [2, 4, 6]
Enter fullscreen mode Exit fullscreen mode

Filter:

less_than_three = lambda x: x < 3
filtered_nums = filter(less_than_three, [1, 2, 3, 4])

print(list(a))
>>> [1, 2]
Enter fullscreen mode Exit fullscreen mode

Equivalente a filter, com list comprehension:

filtered_nums = [x for x in [1, 2, 3, 4] if x < 3]

print(a)
>>> [1, 2]
Enter fullscreen mode Exit fullscreen mode

Bônus! Algumas ferramentas úteis:

howdoi

howdoi, uma ferramenta de linha de comando para quando você está preso em um problema e não quer abrir o browser para consultar o stackoverflow:

pip install howdoi
Enter fullscreen mode Exit fullscreen mode

faça qualquer pergunta, como uma pesquisa no google:

howdoi copy list in python
>>> new_list = old_list.copy()

howdoi lambda in python
>>> lambda arguments: manipulate(arguments)
Enter fullscreen mode Exit fullscreen mode

wemake-python-styleguide

wemake-python-styleguide é plugin de flake8, uma ferramenta de análise estática de código.

pip install wemake-python-styleguide
Enter fullscreen mode Exit fullscreen mode
// module.py
import requests

r = requests.get('https://api.github.com')

print(r.status_code)
Enter fullscreen mode Exit fullscreen mode

para utilizar o linter basta invocá-lo por seu nome, passando seu módulo como argumento:

flake8 module.py
>>> module.py:1:1: D100 Missing docstring in public module
>>> module.py:3:1: WPS111 Found too short name: r
>>> module.py:5:1: T001 print found.
>>> module.py:5:21: W292 no newline at end of file
Enter fullscreen mode Exit fullscreen mode

funcy

funcy é uma coleção de ferramentas baseadas no paradigma funcional, inspirada na linguagem de programação Clojure.

pip install funcy
Enter fullscreen mode Exit fullscreen mode

algumas das inúmeras utilidades que podemos encontrar aqui no cheatsheet deles:

from funcy import flatten, compact 

nested_list = [1, 2, 3, [4, 5, 6], [[7, 8], [9, 10]]] // lista aninhada

print(list(flatten(nested_list)))
>>> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] // lista plana

mylist = [1, '', True, False]

print(compact(mylist)) // compact remove valores nao-verdadeiros (falsy values)
>>> [1, True]
Enter fullscreen mode Exit fullscreen mode

Aguardo seu feedback. :)

Desde já, agradeço!

Top comments (2)

Collapse
 
naigueldev profile image
NaiguelDev

Muito daoraa fééraa. Obrigado por compartilhar seu conhecimento e parabéns pelo conteúdo!!

Collapse
 
jrezzende profile image
jrezzende

muito obrigado Naiguel! bem vindo!