🎯 Desempacotar Sequencias em Python

Em poucas palavras

Definição técnica ou simplificada do conceito.


📝 Notas e Desenvolvimento


🔗 Conexões e Contexto


📚 Referências e Fontes

Citações Diretas

📂 Outros Conteúdos Preservados

Desempacotamento Básico

O desempacotamento mais comum ocorre quando o número de variáveis à esquerda da atribuição corresponde exatamente ao número de elementos na sequência à direita.

Exemplo 1: Desempacotando Tuplas

coordenadas_lax = (33.9425, -118.408056)
latitude, longitude = coordenadas_lax
print(f"Latitude: {latitude}, Longitude: {longitude}")
 
### Saída: Latitude: 33.9425, Longitude: -118.408056
 

Exemplo 2: Troca de Valores de Variáveis

Uma aplicação elegante do desempacotamento é a troca de valores entre duas variáveis sem a necessidade de uma variável temporária.

a = 5
b = 3
a, b = b, a # Os valores de 'a' e 'b' são trocados
print(f"a: {a}, b: {b}")
 
### Saída: a: 3, b: 5
 

Desempacotamento em Chamadas de Função (* para Argumentos)

O operador * pode ser usado para desempacotar uma sequência de argumentos ao chamar uma função. Isso é útil quando uma função espera múltiplos argumentos posicionais e você tem esses argumentos armazenados em uma lista ou tupla.

Exemplo:

A função divmod(a, b) retorna o quociente e o resto da divisão de a por b.

t = (20, 8)
 
### Desempacota a tupla 't' em dois argumentos para divmod
 
resultado_divmod = divmod(*t)
print(resultado_divmod)
 
### Saída: (2, 4)
 
 
 
### Você pode desempacotar o resultado diretamente em variáveis
 
quociente, resto = divmod(*t)
print(f"Quociente: {quociente}, Resto: {resto}")
 
### Saída: Quociente: 2, Resto: 4
 

Desempacotamento em Literais de Lista ou Tupla (* para Expansão)

O operador * também pode ser usado dentro de literais de lista ou tupla para “expandir” os elementos de um iterável existente.

Exemplo:

numeros_iniciais = range(4) # Gera 0, 1, 2, 3
lista_completa = [*numeros_iniciais, 4, 5]
print(lista_completa)
 
### Saída: [0, 1, 2, 3, 4, 5]
 
 
 
### Também funciona com tuplas
 
tupla_completa = (*numeros_iniciais, 4, 5)
print(tupla_completa)
 
### Saída: (0, 1, 2, 3, 4, 5)
 

Desempacotamento Estendido (* para Coletar Múltiplos Itens)

Introduzido na PEP 3132 – Extended Iterable Unpacking, o operador * permite coletar um número arbitrário de itens restantes de uma sequência em uma lista. Isso é conhecido como “desempacotamento estendido”.

Exemplo:

dados = [10, 20, 30, 40, 50, 60]
 
primeiro, *meio, ultimo = dados
print(f"Primeiro: {primeiro}")   # Saída: Primeiro: 10
print(f"Meio: {meio}")           # Saída: Meio: [20, 30, 40, 50]
print(f"Ultimo: {ultimo}")       # Saída: Ultimo: 60
 
### Outro exemplo: coletar o início
 
*inicio, penultimo, final = dados
print(f"Inicio: {inicio}")       # Saída: Inicio: [10, 20, 30, 40]
print(f"Penúltimo: {penultimo}") # Saída: Penúltimo: 50
print(f"Final: {final}")         # Saída: Final: 60

A variável prefixada com * sempre resultará em uma lista, mesmo que não haja elementos para coletar (resultando em uma lista vazia).

:: Referência :: PEP 448 – Generalizações adicionais de desempacotamento