Em Python, você pode definir uma função que recebe um número variável de argumentos. Neste artigo, você aprenderá a definir tais funções usando argumentos padrão, palavra-chave e arbitrários.
Vídeo: Argumentos da função Python: posicional, palavras-chave e padrão
Argumentos
No tópico de função definida pelo usuário, aprendemos sobre como definir uma função e como chamá-la. Caso contrário, a chamada da função resultará em um erro. Aqui está um exemplo.
def greet(name, msg): """This function greets to the person with the provided message""" print("Hello", name + ', ' + msg) greet("Monica", "Good morning!")
Resultado
Olá Monica, Bom dia!
Aqui, a função greet()
possui dois parâmetros.
Como chamamos essa função com dois argumentos, ela funciona sem problemas e não obtemos nenhum erro.
Se o chamarmos com um número diferente de argumentos, o interpretador mostrará uma mensagem de erro. Abaixo está uma chamada para esta função com um e nenhum argumento junto com suas respectivas mensagens de erro.
>>> greet ("Monica") # apenas um argumento TypeError: greet () faltando 1 argumento posicional obrigatório: 'msg'
>>> greet () # sem argumentos TypeError: greet () faltando 2 argumentos posicionais obrigatórios: 'nome' e 'msg'
Argumentos de função variável
Até agora, as funções tinham um número fixo de argumentos. Em Python, existem outras maneiras de definir uma função que pode receber um número variável de argumentos.
Três formas diferentes desse tipo são descritas a seguir.
Argumentos padrão do Python
Os argumentos da função podem ter valores padrão em Python.
Podemos fornecer um valor padrão para um argumento usando o operador de atribuição (=). Aqui está um exemplo.
def greet(name, msg="Good morning!"): """ This function greets to the person with the provided message. If the message is not provided, it defaults to "Good morning!" """ print("Hello", name + ', ' + msg) greet("Kate") greet("Bruce", "How do you do?")
Resultado
Olá Kate, Bom dia! Olá Bruce, como vai você?
Nesta função, o parâmetro name
não tem um valor padrão e é obrigatório (obrigatório) durante uma chamada.
Por outro lado, o parâmetro msg
tem um valor padrão de "Good morning!"
. Portanto, é opcional durante uma chamada. Se um valor for fornecido, ele substituirá o valor padrão.
Qualquer número de argumentos em uma função pode ter um valor padrão. Mas, uma vez que temos um argumento padrão, todos os argumentos à sua direita também devem ter valores padrão.
Isso significa que os argumentos não padrão não podem seguir os argumentos padrão. Por exemplo, se tivéssemos definido o cabeçalho da função acima como:
def greet (msg = "Bom dia!", nome):
Obteríamos um erro como:
SyntaxError: o argumento não padrão segue o argumento padrão
Python Keyword Arguments
Quando chamamos uma função com alguns valores, esses valores são atribuídos aos argumentos de acordo com sua posição.
Por exemplo, na função acima greet()
, quando a chamamos como greet("Bruce", "How do you do?")
, o valor "Bruce"
é atribuído ao nome do argumento e de forma semelhante "How do you do?"
a msg.
Python permite que funções sejam chamadas usando argumentos de palavra-chave. Quando chamamos funções dessa maneira, a ordem (posição) dos argumentos pode ser alterada. As chamadas seguintes para a função acima são todas válidas e produzem o mesmo resultado.
# 2 keyword arguments greet(name = "Bruce",msg = "How do you do?") # 2 keyword arguments (out of order) greet(msg = "How do you do?",name = "Bruce") 1 positional, 1 keyword argument greet("Bruce", msg = "How do you do?")
Como podemos ver, podemos misturar argumentos posicionais com argumentos de palavra-chave durante uma chamada de função. Mas devemos ter em mente que os argumentos de palavra-chave devem seguir argumentos posicionais.
Ter um argumento posicional após os argumentos de palavra-chave resultará em erros. Por exemplo, a chamada de função da seguinte maneira:
greet(name="Bruce","How do you do?")
Resultará em um erro:
SyntaxError: argumento sem palavra-chave após argumento de palavra-chave
Argumentos Arbitrários Python
Às vezes, não sabemos com antecedência o número de argumentos que serão passados para uma função. Python nos permite lidar com esse tipo de situação por meio de chamadas de função com um número arbitrário de argumentos.
Na definição da função, usamos um asterisco (*) antes do nome do parâmetro para denotar esse tipo de argumento. Aqui está um exemplo.
def greet(*names): """This function greets all the person in the names tuple.""" # names is a tuple with arguments for name in names: print("Hello", name) greet("Monica", "Luke", "Steve", "John")
Resultado
Hello Monica Hello Luke Hello Steve Hello John
Aqui, chamamos a função com vários argumentos. Esses argumentos são agrupados em uma tupla antes de serem passados para a função. Dentro da função, usamos um for
loop para recuperar todos os argumentos.