Entenda o desempacotamento do Python
Um dos exercícios mais comuns nas aulas básicas de programação é sem dúvida
alguma o de trocar os valores das variáveis a
e b
.
Mas se a linguagem for Python, existe uma outra maneira:
Ok até agora não tivemos muitas novidades, provavelmente você já viu isso em algum lugar. Mas neste post eu vou apresentar mais algumas possibilidades deste desempacotamento do Python!
Desempacotamento com Python⌗
Algo que eu faço muito resolvendo exercícios do
URI é ler a linha dar um split
na linha
e converter todos os elementos para um tipo especifico, geralmente int
.
Claro que podemos fazer isso de várias formas, por exemplo:
Esse exemplo funcionaria, mas seria extremamente lento de se escrever isso se tivermos várias variáveis diferentes na linha, então hoje eu uso muito, mas muito mesmo essa solução com list-comprehensions:
De cinco linhas para uma até que nos livramos de uma boa parte de código repetitivo!
Melhorando a legibilidade do código⌗
Agora vamos a um exemplo menos bobinho, e também com menos cara de exercício de programação, sem unpacking:
A função get_curso_by_id()
retorna uma tupla com: id, nome, descrição,
coordenador, data de inicio. Referenciar estes campos por seu índices é
uma solução feia que permite muitos erros. Então vamos deixar este código mais
legível com desempacotamento:
Muito mais legível!
Agora vamos dizer que a data retorna também uma tupla com anos, mês e dia. Para separar esses valores também nos poderíamos fazer o seguinte:
Ignorando valores⌗
Agora vamos dizer que você precisa apenas do nome do curso e do coordenador,
o Python não possui nenhuma sintaxe específica pra isso, mas você pode
simplesmente atribuir esses campos para uma variável aleatória, como _
:
Desempacotando valores de iteráveis de tamanho variável⌗
Tudo isso e muito bonito mas é no caso de iteráveis que eu não sei exatamente o
tamanho? É agora que entram as *
no Python, mas acalme-se meu jovem
traumatizado pelos ponteiros de C essa estrelinha não tem nenhuma relação com
eles.
Em detalhes: nome
e email
receberam os dois primeiros elementos, e
telefones
recebeu todo o resto.
E claro que as ’estrelinhas’ não servem só pra desempacotar os últimos elementos: elas podem estar no meio, no incio e no fim da expressões de desempacotamento.
A única exigência e que exista apenas um ‘valor estrelado’ na expressão:
Passando um iterável ou dicionário como argumentos de uma função⌗
Essa talvez você já tenha visto em algum lugar:
E aí, o que achou dessa forma de desempacotar dados com o Python?