Existem três tipos de argumentos que uma função Python pode aceitar: padrão, variável (*args) e palavra-chave (**kwargs). Os argumentos padrão são os mais simples, mas têm funcionalidade limitada. Por outro lado, *args e **kwargs permitem que você torne suas funções mais flexíveis, aceitando um número variável de entradas.
O tipo de passagem de argumento que você escolhe depende da natureza da sua função e do seu estilo de programação preferido.
Funções básicas em Python
Para entender como os dois argumentos variáveis em funções Python funcionam, é essencial entender por que eles existem em primeiro lugar. Uma função simples declara um número fixo de argumentos anônimos assim:
defaddnum(a, b, c):
Retorna a + b + c
Esta função funciona bem, mas há espaço para melhorias. O maior problema é que ele só lida com dois argumentos, então só pode somar dois números. E se você quiser adicionar dois ou quatro números? Esta função não permitirá que você faça isso. Passar mais ou menos argumentos do que a função aceita levará a um TypeError.
Claro, você pode criar mais funções para aceitar diferentes números de argumentos. Mas isso é inconveniente e não vai escalar bem. Você também precisará criar uma nova função toda vez que quiser manipular um novo número de entradas.
É aí que entram os argumentos de variáveis e de palavras-chave. Usando *args e **kwargs, você pode definir funções flexíveis que podem receber um número variável de entradas.
O que é *args em Python?
A ideia principal por trás de *args em Python é permitir que você passe um número variável de entradas para sua função. Isso é útil em várias aplicações. Por exemplo, pense em um programa de calculadora em que você deseja dar ao usuário a capacidade de adicionar dois ou mais números e retornar a soma.
Observe que args é apenas um nome de variável; é o * que é importante. Você pode usar qualquer nome válido para seu argumento de variável, desde que inclua o *.
Como usar *args
Você pode modificar a função addnum para receber um número variável de entradas da seguinte forma:
defaddnum(*args):
total = 0por número dentro argumentos:
total = total + numero
Retorna total
O trecho de código acima usa um loop for para iterar através das entradas fornecidas.
Você pode então chamar a função addnum com argumentos variáveis e ela funcionará sem gerar um erro:
imprimir(addnum(10, 1, 12, 12, 4, 54, 5)) ## retorna 98
imprimir(addnum(14, 54, 5)) # retorna 73
imprimir(addnum(10, 5)) # retorna 15
O que é **kwargs em Python?
Enquanto *args e **kwargs nos permitem passar um número variável de entradas para funções, o último é específico para argumentos de palavras-chave. Caso você não saiba, os argumentos de palavras-chave são apenas nomes sofisticados para argumentos com um nome.
Outra coisa única sobre **kwargs é que Python representa o valor como um dicionário.
Como usar **kwargs
Assim como *args, o asterisco duplo é a parte importante; você pode usar qualquer palavra como um nome de parâmetro. Aqui está um exemplo de como usar **kwargs em Python:
defcomparecimento semanal(**dias da semana):
total_attendees = 0porparticipantesdentrodias da semana.valores():
total_attendees = total_attendees + participantesRetorna total_attendees
imprimir(weekly_attendance (segunda-feira = 265, terça-feira = 698, quarta-feira = 365, quinta-feira = 463, sexta-feira = 234)) # retorna 2025
imprimir(weekly_attendance (segunda-feira = 265, sexta-feira = 234)) # retorna 499
imprimir(weekly_attendance (quarta-feira = 365, quinta-feira = 463, sexta-feira = 234)) # retorna 1062
O trecho de código acima também usa um loop for, mas desta vez com o método values() embutido do Python. Esse método retorna um objeto de visualização de todos os valores do dicionário. O método values() permite que você percorrer um dicionário Python sem aborrecimentos.
Use argumentos variáveis para tornar suas funções Python flexíveis
Os argumentos de função são úteis, mas algumas funções podem se beneficiar ao aceitar um número variável de argumentos. Argumentos de palavras-chave nomeadas podem tornar seu código mais legível e fácil de usar. Você deve adotar os argumentos *args e **kwargs do Python. Eles são bem simples de usar e, com eles, você pode tornar suas funções e programas mais flexíveis.
Seguindo as etapas e os snippets de código acima, esperamos que agora você possa usar argumentos variáveis de palavras-chave e não palavras-chave para suas funções.