Funções em Python são definidas com a palavra
def, seguidas pelo seu nome, além de parênteses.
Dentro dos parênteses, existe a possibilidade de se incluir uma lista de parâmetros.
No início do corpo da função, é uma boa prática fazer um comentário, chamado de
docstrings. Usando
docstrings, ferramentas podem utilizar o comentário para a documentação do sistema.
Funções em Python podem ter a opção de retornar algum valor, uma lista, um objeto, etc ou podem não retornar nada, se portando como um procedimento.
>>> def fib(n):
... """Imprime uma série de Fibonacci para o parâmetro n."""
... a, b = 0, 1
... while a < n:
... print a,
... a, b = b, a+b
...
>>> # Chamando a função
... fib(2000)
>>> def fib2(n):
... """Returnondo uma lista contendo uma série de Fibonacci para n."""
... result = []
... a, b = 0, 1
... while a < n:
... result.append(a)
... a, b = b, a+b
... return result
...
>>> f100 = fib2(100)
Podemos ter um variável número de argumentos na lista, com valores default ou não. Para valores default, não existe a necessidade de se passar esse valor para a função.
Além disso, não é necessário passar os argumentos para a função na ordem dos parâmetros, desde que utilizemos um par nome=valor.
>>> def funcaoComArgumento(arg1, arg2="valor_default", arg3="valor_default")
...
#chamadas a função
funcaoComArgumento(100)
funcaoComArgumento(arg2="qualquercoisa", arg1=100)
# ocorrerá um erro para a chamada a seguir pois não existe um valor default para arg1
funcaoComArgumento(arg2="qualquercoisa")
Finalizando, parâmetros com a forma
**name recebem um dicionário e com a forma
*name recebem tuplas. Os parâmetros que recebem dicionários devem, obrigatoriamente serem os últimos parâmetros da função.
def cheeseshop(kind, *arguments, **keywords):
print "-- Do you have any", kind, "?"
print "-- I'm sorry, we're all out of", kind
for arg in arguments:
print arg
print "-" * 40
keys = sorted(keywords.keys())
for kw in keys:
print kw, ":", keywords[kw]
cheeseshop("Limburger", "It's very runny, sir.",
"It's really very, VERY runny, sir.",
shopkeeper='Michael Palin',
client="John Cleese",
sketch="Cheese Shop Sketch")
-- Do you have any Limburger ?
-- I'm sorry, we're all out of Limburger
It's very runny, sir.
It's really very, VERY runny, sir.
----------------------------------------
client : John Cleese
shopkeeper : Michael Palin
sketch : Cheese Shop Sketch