Funções em Python: entendendo parâmetros, argumentos, *args e **kwargs

Guilherme Reis
Nov 1 · 3 min read

Funções em Python são blocos de código que executarão algum tipo de tarefa ou manipulação de dados, podendo ou não receber: dados de entrada (parâmetros/argumentos).

Parâmetros: são os nomes dados aos atributos que uma função pode receber. Definem quais argumentos são aceitos por uma função, podendo ou não ter um valor padrão (default).

Argumentos: são os valores que realmente são passados para uma função.

Veja a simples função abaixo:

No exemplo acima na função calculadora_salario, definimos dois parâmetros que são chamados de valor e horas. O parâmetro valor não possui um valor default, então é obrigatório passá-lo como argumento. Já o parâmetro horas possui um valor default, o que o torna a passagem do argumento não obrigatório, assim é assumido o valor 220. Caso não passarmos o argumento para o parâmetro valor recebemos o seguinte erro:

Traceback (most recent call last):
File "learn_decorators.py", line 41, in <module>
print(calculadora_salario())
TypeError: calculadora_salario() missing 1 required positional argument: 'valor'

Note que os parâmetros obrigatórios devem ser colocados antes de qualquer parâmetro default (da esquerda para direita), para que não ocorra uma confusão no interpretador e ocorra o erro:


SyntaxError: non-default argument follows default argument

Agora que entendemos obrigatoriedade de parâmetros, vamos analisar o uso dos parâmetros *args e **kwargs .

Para começo de conversa, as palavras args e kwargs são apenas usadas como convenção, ou seja, poderiam ter qualquer outro nome, por exemplo: *parms e **kwparms.

*args

É usado para passar um lista de argumentos variável sem palavras-chave em forma de tupla, pois a função que o recebe não necessariamente saberá quantos argumentos serão passados.

Exemplo:

# Output:
tipo: <class 'tuple'> conteúdo: (1, 'A', {'valor': 10})
tipo: <class 'int'> conteúdo: 1
tipo: <class 'str'> conteúdo: A
tipo: <class 'dict'> conteúdo: {'valor': 10}

No exemplo acima temos uma função que recebe um parâmetro do tipo *args com alguns argumentos e escreve no terminal o tipo e o conteúdo, junto com o tipo e conteúdo de cada argumento da tupla.

**kwargs

Como a abreviação sugere, kwargs significa keyword arguments (argumentos de palavras chave). Ele permite passar um dicionário com inúmeras keys para a função.

Exemplo:

# Output
tipo: <class 'dict'> conteúdo: {'nome': 'James', 'sobrenome': 'Bond', 'cargo': 'Agente 007'}
atributo: nome, valor: James
atributo: sobrenome, valor: Bond
atributo: cargo, valor: Agente 007

Como vimos acima no output da função usando ** podemos notar que o tipo do argumento é passado como dicionário com chaves e valores.

Outra forma de passar um dicionário já existente é usando os ** na passagem do parâmetro:

parms = {
'nome': 'James',
'sobrenome': 'Bond',
'cargo': 'Agente 007'
}
func_kwargs(**parms)

Agora para finalizar vamos ver como ficaria um função usando todos os parâmetros que vimos.

# Output
Nome do agente: James Bond
Função: agente
('Missão 1', 'Missão 2')
{'id_agente': '007', 'proxima_missao': 'Impossível'}

No exemplo acima, usamos todos os recursos mencionados no post:

Por hoje é isso pessoal, aprendemos um pouco sobre esse recurso muito interessante da linguagem Python. Espero ter ajudado no entendimento dessas palavrinhas especiais para construção de funções. Até a próxima.

luizalabs

Utilizar a tecnologia para oferecer uma experiência diferenciada ao cliente. Este é o objetivo do LuizaLabs, o laboratório de Tecnologia e Inovação do Magazine Luiza.

Thanks to Débora Garcia and Henrique Braga

Guilherme Reis

Written by

Software developer

luizalabs

luizalabs

Utilizar a tecnologia para oferecer uma experiência diferenciada ao cliente. Este é o objetivo do LuizaLabs, o laboratório de Tecnologia e Inovação do Magazine Luiza.

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade