No desenvolvimento de software, frequentemente nos deparamos com a necessidade de criar funções flexíveis, capazes de lidar com um número variável de argumentos. Em Python, isso é possível utilizando os conceitos de *args
e **kwargs
. Neste tutorial, vamos explorar como criar e utilizar funções com número arbitrário de argumentos em Python.
O que são *args
e **kwargs
?
Em Python, *args
e **kwargs
são usados para permitir que uma função aceite um número variável de argumentos.
*args
permite que você passe um número variável de argumentos posicionais para uma função.**kwargs
permite que você passe um número variável de argumentos nomeados (ou argumentos com palavra-chave) para uma função.
Exemplo Básico com *args
Vamos começar com um exemplo simples de uma função que soma um número arbitrário de valores:
def somar(*valores):
return sum(valores)
resultado = somar(1, 2, 3, 4)
print(resultado) # Saída: 10
TestarNeste exemplo, a função somar
pode receber qualquer quantidade de argumentos e somá-los. O operador *
antes do parâmetro valores
indica que todos os argumentos passados para a função serão acumulados em uma tupla.
Exemplo Básico com **kwargs
Agora, vejamos um exemplo de uma função que exibe argumentos passados com e sem palavra-chave:
def exibe_argumentos(*args, **kwargs):
print(f'Argumentos passados sem palavra-chave: {args}')
print(f'Argumentos passados com palavra-chave: {kwargs}')
exibe_argumentos(1, 2, 3, nome='Juliano', idade=30)
TestarNeste exemplo, *args
captura os argumentos posicionais em uma tupla, enquanto **kwargs
captura os argumentos nomeados em um dicionário.
Utilizando *args
e **kwargs
Juntos
Você pode combinar *args
e **kwargs
em uma única função para aceitar tanto argumentos posicionais quanto nomeados:
def funcao_completa(a, b, *args, **kwargs):
print(f'a: {a}')
print(f'b: {b}')
print(f'args: {args}')
print(f'kwargs: {kwargs}')
funcao_completa(1, 2, 3, 4, 5, nome='Juliano', idade=30)
TestarA saída será:
a: 1
b: 2
args: (3, 4, 5)
kwargs: {'nome': 'Juliano', 'idade': 30}
Desmembrando Argumentos na Chamada de Funções
Você também pode usar os operadores *
e **
para desmembrar sequências ou dicionários na hora de chamar uma função:
valores = [1, 2, 3]
dic = {'nome': 'Juliano', 'idade': 30}
exibe_argumentos(*valores, **dic)
TestarNeste caso, a lista valores
e o dicionário dic
são desmembrados em argumentos individuais.
Decoradores e Funções com Número Arbitrário de Argumentos
Os decoradores em Python frequentemente utilizam *args
e **kwargs
para garantir que possam decorar qualquer função, independentemente do número e tipo de argumentos que ela aceita.
def meu_decorador(func):
def wrapper(*args, **kwargs):
print("Executando algo antes da função")
resultado = func(*args, **kwargs)
print("Executando algo depois da função")
return resultado
return wrapper
@meu_decorador
def dizer_oi(nome):
print(f'Olá, {nome}!')
dizer_oi('Juliano')
TestarA saída será:
Executando algo antes da função
Olá, Juliano!
Executando algo depois da função
Conclusão
Funções com número arbitrário de argumentos em Python são extremamente úteis para criar funções flexíveis e reutilizáveis. Utilizando *args
e **kwargs
, você pode criar funções que aceitam qualquer quantidade de argumentos posicionais e nomeados, tornando seu código mais robusto e adaptável a diferentes situações.
Experimente utilizar *args
e **kwargs
em seus próprios projetos e veja como eles podem simplificar a manipulação de argumentos em suas funções!
Cursos de programação gratuitos com certificado
Aprenda a programar e desenvolva soluções para o seu trabalho com Python para alcançar novas oportunidades profissionais. Aqui na Asimov você encontra:
- Conteúdos gratuitos
- Projetos práticos
- Certificados
- +20 mil alunos e comunidade exclusiva
- Materiais didáticos e download de código
Comentários