English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
EmFunção definida pelo usuárioNeste artigo, aprendemos sobre a definição de funções e a chamada de funções. Se não estiver claro como chamar uma função, isso pode levar a erros imprevisíveis. Abaixo está um exemplo.
def greet(name, msg): """Essa é uma função de saudação Os parâmetros name, msg print("Olá", name + ', '' + msg) greet("Monica", "Bom dia!")
Saída de resultados
Olá Monica, Bom dia!
A função greet() tem dois parâmetros.
Como já chamamos a função com dois parâmetros, ela roda normalmente e não há erros.
Se o interpretador for chamado com diferentes números de parâmetros, ele exibirá uma mensagem de erro. Abaixo está a chamada deste função, que demonstra a chamada com um único parâmetro e a chamada sem parâmetros, mostrando as mensagens de erro lançadas após a execução.
>>> greet("Monica") # Fornecido apenas um parâmetro TypeError: greet() faltando 1 argumento posicionais obrigatórios faltando: 'msg'
>>> greet() # Não foram fornecidos quaisquer parâmetros TypeError: greet() faltando 2 argumentos posicionais obrigatórios: 'name' e 'msg'
Até agora, a função tem um número fixo de parâmetros. No Python, há outras maneiras de definir funções que podem aceitar um número variável de parâmetros.
Vamos apresentar três formas diferentes deste tipo.
Em Python, os parâmetros de função podem ter valores padrão.
Podemos usar o operador de atribuição (=) para fornecer valores padrão para os parâmetros. Este é um exemplo.
def greet(name, msg = "bom dia!"): """ Esta função cumprimenta a pessoa que fornece a mensagem. se não for fornecida uma mensagem, então o valor padrão é "bom dia!" """ print("Olá", name + ', '' + msg) greet("Zhang San") greet("Lisi", "Como vai?")
Saída de resultados
Olá, Zhang San, bom dia! Olá, Lisi, como vai?
Neste função, o parâmetro name não tem valor padrão, então o parâmetro name deve ser fornecido ao chamar esta função (obrigatório).
Por outro lado, o valor padrão do parâmetro msg é "Good morning!". Portanto, ao chamar a função, não é necessário fornecer um valor. Se um valor for fornecido ao chamar a função, ele substituirá o valor padrão.
Qualquer número de parâmetros em uma função pode ter valores padrão. Mas uma vez que há parâmetros padrão, todos os parâmetros à direita também devem ter valores padrão.
Isso significa que os parâmetros não padrão não podem seguir os parâmetros padrão. Por exemplo, se definirmos o cabeçalho da função acima como:
def greet(msg = "Good morning!", name):
Vamos receber a seguinte mensagem de erro:
SyntaxError: non-argumento padrão seguido por argumento padrão
Quando chamamos uma função com alguns valores, esses valores são atribuídos aos parâmetros com base em sua posição.
Por exemplo, na função greet() acima, quando chamamos greet("Bruce", "How do you do?") o valor "Bruce" é atribuído ao parâmetronameE "How do you do?" foi atribuído a msg.
O Python permite a chamada de funções com parâmetros nomeados. Quando chamamos a função dessa forma, a ordem (posição) dos parâmetros pode ser alterada. Todas as chamadas subsequentes da função são válidas e produzem o mesmo resultado.
# 2parâmetros greet(name = "Bruce",msg = "How do you do?") # 2parâmetros, a ordem dos parâmetros pode ser invertida greet(msg = "How do you do?",name = "Bruce") #1 parâmetros 1 parâmetros greet("Bruce", msg = "How do you do?")
Como vimos, podemos misturar parâmetros posicionais e nomeados durante a chamada da função. Mas devemos lembrar que os parâmetros nomeados devem seguir os parâmetros posicionais.
Colocar parâmetros posicionais após parâmetros nomeados causará um erro. Por exemplo, a chamada da função é assim:
greet(name="Bruce","How do you do?")
causará um erro:
SyntaxError: non-keyword arg after keyword arg
Às vezes, não sabemos previamente o número de parâmetros que serão passados para a função. O Python nos permite lidar com essa situação através de chamadas de função com número arbitrário de parâmetros.
No define da função, usamos o asterisco(*)representa esses parâmetros. Este é um exemplo.
def greet(*names): """Os objetos abordados por essa função são Todas as pessoas na lista de tuplas.""" # O nome é uma tupla com parâmetros for name in names: print("Olá", name) greet("Monica", "Luke", "Steve", "John")
Saída de resultados
Olá Monica Olá Luke Olá Steve Olá John
Aqui, chamamos uma função com vários parâmetros. Esses parâmetros são empacotados em uma tupla antes de serem passados para a função. Dentro da função, usamos um loop for para recuperar todos os parâmetros.