Banner do topo
Logo
Translate
Imagem de capa da postagem
Cristiano

Full Stack Developer

Desvendando o Operador de Desempacotamento (* e **) no Python

Quando trabalhamos com listas, tuplas e dicionários no Python, muitas vezes precisamos passar seus elementos para funções, combiná-los ou expandi-los de maneira eficiente. O operador de desempacotamento (* para listas/tuplas e ** para dicionários) nos ajuda a fazer isso de forma elegante e concisa.

Se você já usou o operador ... (spread operator) no JavaScript/React, encontrará muitas semelhanças no Python. Vamos explorar como esse recurso funciona e como podemos usá-lo em nossos projetos.

1. Desempacotamento de Listas e Tuplas com *

O operador * pode ser usado para expandir elementos de uma lista ou tupla dentro de uma função ou ao atribuir valores a variáveis.

 

Passando múltiplos argumentos para uma função

Ao invés de passar manualmente cada elemento de uma lista, podemos desempacotá-la diretamente:

def greet(a, b, c):
   print(a, b, c)
names = ["Alice", "Bob", "Charlie"]
greet(*names)  # Equivalente a greet("Alice", "Bob", "Charlie")

 

Por que usar isso?
Se tivermos uma lista dinâmica, não precisamos saber quantos elementos ela contém para passá-los para a função.

 

2. Criando listas de forma dinâmica

Podemos combinar listas de maneira mais intuitiva usando *:

numbers = [1, 2, 3]
new_numbers = [0, *numbers, 4]
print(new_numbers)  # [0, 1, 2, 3, 4]

 

Por que isso é útil?
Isso evita loops desnecessários ao juntar listas e melhora a legibilidade do código.

3. Atribuindo múltiplos valores a variáveis

Podemos usar * para capturar múltiplos valores em uma variável ao fazer atribuição múltipla:

first, *middle, last = [10, 20, 30, 40, 50]
print(first)  # 10
print(middle)  # [20, 30, 40]
print(last)  # 50

 

Quando isso é útil?
Ao processar dados, podemos capturar um subconjunto de valores sem precisar fatiar a lista manualmente.

4. Desempacotamento de Dicionários com **

O operador ** é usado para expandir dicionários (dicts), permitindo passar seus pares chave: valor para funções ou combiná-los.

 

Passando um dicionário para uma função

def display_info(name, age, city):
    print(f"Name: {name}, Age: {age}, City: {city}")

person = {"name": "Alice", "age": 25, "city": "New York"}
display_info(**person)  # Equivalente a display_info(name="Alice", Age=25, City="New York")

 

Por que isso é útil?
Torna o código mais flexível, pois permite usar dicionários diretamente como argumentos nomeados.

5. Combinando dicionários

Podemos usar ** para juntar múltiplos dicionários:

user = {"name": "Alice", "age": 25}
updated_user = {**user, "city": "New York"}
print(updated_user)
# {'name': 'Alice', 'age': 25, 'city': 'New York'}

 

Evita sobrescrita indesejada?
Se houver chaves duplicadas, os valores do dicionário à direita substituirão os valores do dicionário à esquerda.

 

6. Usando *args e **kwargs em funções

Os operadores * e ** são muito úteis ao definir funções que podem receber um número variável de argumentos.

 

*args: múltiplos argumentos posicionais

def sum_all(*numbers):
   return sum(numbers)
print(sum_all(1, 2, 3, 4, 5))  # 15

 

Por que isso é útil?
Não precisamos definir um número fixo de parâmetros, tornando a função mais flexível.

 

 

**kwargs: múltiplos argumentos nomeados

def show_info(**kwargs):
   for key, value in kwargs.items():
       print(f"{key}: {value}")
show_info(name="Alice", age=25, city="New York")

 

Para que serve isso?
Permite criar funções que aceitam qualquer número de argumentos nomeados, úteis para configurações dinâmicas.

 

Conclusão

O operador de desempacotamento (* e **) no Python é uma ferramenta poderosa para manipular listas, tuplas e dicionários de forma eficiente. Ele melhora a legibilidade, flexibilidade e performance do código, eliminando a necessidade de manipulações manuais desnecessárias.

 

Se você trabalha com grandes quantidades de dados, APIs ou funções reutilizáveis, entender e dominar esse operador pode fazer uma grande diferença na sua produtividade.

 

E você, já usou * e ** em seus projetos? 

Compartilhe nos comentários como eles te ajudaram!

Tags:

#python #programação #desenvolvimentoweb #backend #aprendapython #tecnologia #dev

Comentários (0)