🎯 Desempacotar Sequencias em Python
Em poucas palavras
Definição técnica ou simplificada do conceito.
📝 Notas e Desenvolvimento
🔗 Conexões e Contexto
- Atlas: MdC - Programação
- Notas Relacionadas:
📚 Referências e Fontes
Links Externos
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: 60A 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