Como usar *args e **kwargs em funções Python
Domine *args e **kwargs em Python. Aprenda como escrever funções flexíveis com argumentos posicionais e de palavras-chave dinâmicos, descompactar coleções e criar funções wrapper.
Visão geral
Em Python, muitas vezes você precisará projetar funções que possam aceitar um número variável de argumentos. Por exemplo, uma função que calcula a soma de qualquer número de números inteiros ou uma função que registra metadados com campos variados. Em vez de forçar os usuários a passar uma lista ou dicionário, Python fornece dois símbolos especiais: `*args` e `**kwargs`.
A sintaxe `*args` permite que uma função aceite qualquer número de argumentos posicionais. O único asterisco `*` atua como um operador de descompactação. Quando colocado em uma definição de função, ele coleta argumentos posicionais extras em uma tupla chamada `args`. Isso permite iterar os valores de entrada, executar cálculos ou passá-los para outra função com facilidade.
A sintaxe `**kwargs`, por outro lado, permite que uma função aceite qualquer número de argumentos de palavras-chave (nomeados). O asterisco duplo `**` coleta esses argumentos em um dicionário chamado `kwargs`. Isso é extremamente útil para passar configurações opcionais, estilizar argumentos ou atributos de banco de dados. Lembre-se, os nomes 'args' e 'kwargs' são convenções; a funcionalidade real é orientada pelos asteriscos simples e duplos.
Saída de código e execução
Este código demonstra o uso de *args para somar números de variáveis, **kwargs para imprimir perfis de usuário e combinar ambos em uma única função.
def sum_all(*args):
print("args type:", type(args).__name__)
return sum(args)
print("Sum (1, 2, 3):", sum_all(1, 2, 3))
print("Sum (10, 20):", sum_all(10, 20))
def print_profile(**kwargs):
print("kwargs type:", type(kwargs).__name__)
for key, value in kwargs.items():
print(f"{key}: {value}")
print_profile(name="Bob", role="developer", country="US")
def master_function(first, *args, **kwargs):
print(f"First argument: {first}")
print(f"Additional positional args: {args}")
print(f"Keyword args: {kwargs}")
master_function("hello", 1, 2, 3, debug=True, user_id=42)args type: tuple
Sum (1, 2, 3): 6
args type: tuple
Sum (10, 20): 30
kwargs type: dict
name: Bob
role: developer
country: US
First argument: hello
Additional positional args: (1, 2, 3)
Keyword args: {'debug': True, 'user_id': 42}Implementação passo a passo
- Use um único asterisco antes de um parâmetro (por exemplo, *args) para reunir argumentos posicionais em uma tupla.
- Use um asterisco duplo antes de um parâmetro (por exemplo, **kwargs) para reunir argumentos de palavras-chave em um dicionário.
- Mantenha a ordem correta dos parâmetros: parâmetros padrão, *args, parâmetros somente de palavras-chave e, em seguida, **kwargs.
- Use a sintaxe de descompactação ao chamar funções passando *iterable ou **dictionary.
Perguntas frequentes
Devo usar os nomes "args" e "kwargs"?
Não, estas são convenções comunitárias padrão. Apenas os prefixos * e ** são sintaticamente necessários. Você poderia escrever *valores e **opções, mas aderir a *args e **kwargs é altamente recomendado para facilitar a leitura.
Qual é a ordem correta ao definir uma função?
A ordem correta dos argumentos em uma assinatura de função é: argumentos posicionais, *args, argumentos somente de palavras-chave e, finalmente, **kwargs.
Tópicos Relacionados
Aprenda como criar uma classe em Python. Domine o construtor __init__, métodos de instância, palavra-chave self e instanciação de objetos.
Como usar funções Lambda em PythonAprenda como usar funções lambda em Python. Domine funções anônimas, retornos de chamada embutidos e classificação de dados de listas com chaves lambda.
Recursos Python recomendados
Expanda seu conhecimento com tutoriais interativos relacionados, folhas de dicas e comparações de código.
Loops Python
Aprenda como usar loops Python para iterar dados. Domine as práticas recomendadas para loops for, while loops, break, continue e loop com exemplos interativos.
Folha de dicas dos métodos de string Python
Um guia de referência completo para manipulação de strings em Python. Domine a formatação, pesquisa, divisão, substituição e verificação de propriedades de string.
Python vs JavaScript: qual linguagem de programação é a melhor?
Uma comparação abrangente entre Python e JavaScript. Explore diferenças de sintaxe, desempenho, casos de uso (backend versus frontend) e exemplos de codificação.