O Operador de Desempacotamento * em Listas e Dicionários
Conforme o código Python cresce, combinar estruturas de dados vira algo comum.
Listas aumentam, dicionários se juntam, argumentos são repassados.
Os operadores de unpacking * e ** existem para tornar essas operações mais claras e expressivas.
Unpacking de listas e tuplas com *
numbers = [3, 4, 5]
combined = [1, 2, *numbers]
print(combined)
# [1, 2, 3, 4, 5]
Isso evita concatenação manual e deixa a intenção clara.
Unpacking de dicionários com **
defaults = {"host": "localhost", "port": 5432}
overrides = {"port": 5433}
config = {**defaults, **overrides}
print(config)
# {'host': 'localhost', 'port': 5433}
Valores posteriores sobrescrevem os anteriores, o que é ótimo para configurações.
Unpacking em chamadas de função
def connect(host, port):
print(host, port)
params = {"host": "localhost", "port": 5432}
connect(**params)
Muito útil ao passar dados entre camadas ou APIs.
Combinando *args e **kwargs
def wrapper(*args, **kwargs):
return target(*args, **kwargs)
O unpacking é fundamental em decorators e wrappers.
Um erro comum a evitar
Evite exagerar no unpacking quando isso esconde a lógica:
# Mais difícil de entender
data = [*get_items(), *get_more_items(), *get_even_more()]
Se a origem dos dados importa, etapas explícitas costumam ser melhores.
Conclusão
No Python do mundo real, os operadores de unpacking ajudam a reduzir ruído e deixar a intenção clara.
Usados com cuidado, * e ** tornam o código mais legível — não mais mágico.