Funções em Python: N maneiras diferentes de declarar e chamar!

Rafael Tardivo
rafaeltardivo
Published in
2 min readMay 19, 2018

Existem N maneiras de declarar/chamar funções em Python… Hoje veremos algumas delas!

créditos da imagem: http://www.voidspace.org.uk/python/weblog/arch_Tools.shtml

Função sem argumentos

def hello_world():
print("Hello World!")

Nenhuma novidade até aí: Sem argumentos, instrução simples, é só executar e ser feliz:

>>> hello_world()
Hello World!

Função com argumentos obrigatórios

Trata-se do método old-fashion: Argumentos identificados pela ordem:

def say_something(msg, name):
print('{}, {}!'.format(msg, name))

A chamada seria algo como:

>>> say_something('Hi', 'Nina')
Hi, Nina!

Novamente, nenhuma novidade… Mas se tentarmos chamar a função com menos argumentos ela simplesmente não será executada!

>>> say_something('Hi')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: greet() takes exactly 2 arguments (1 given)

E se errarmos a ordem dos argumentos, a função interpretatará name como msg e msg como name:

say_something('Nina', 'Hi')
Nina, Hi!

Função com argumentos nomeados na chamada

Nós até podemos inverter a ordem dos argumentos, desde que os tratemos como argumentos nomeados:

>>> greet(name='Nina', msg='Hi')
Hi, Nina!

repare que embora tenhamos passado o nome antes da mensagem, eles foram usados na ordem certa, pois os parâmetros foram nomeados :)

Função declarada com valores padrão

Também é possível definir valores padrão para argumento(s) de uma função:

def say_something(name, msg='Oh yeah'):
print('{}, {}!'.format(msg, name))

Dessa forma podemos omitir o argumento msg na chamada, pois ele assumirá seu valor padrão:

say_something('Buckethead')
Oh yeah, Buckethead!

Observação: O argumento com valor padrão não ficou por último por acaso, é obrigatório que seja assim! Ou todos têm valor padrão, ou os com valor padrão fica por último.

Recapitulando

say_something(msg, name) # obrigatórios e na ordem certa!
say_something(name='Nina', msg='Hi!') # nomeados, ordem arbitrária!
def say_something(name, msg='hi!') # valor padrão, permite omissão!

Conclusão

Whatever, man! — Jeffrey Lebowski

O próximo será sobre *args e **kwargs :)

--

--