Menu

Funções em Python: def, return, argumentos default e por palavra-chave

Como definir e usar funções em Python — parâmetros, valores de retorno, argumentos default, argumentos por palavra-chave e hábitos de nomeação que mantêm o código legível.

Uma função é um bloco de passos com nome

Qualquer hora que você se pega escrevendo as mesmas poucas linhas mais de uma vez — ou querendo dar nome a um pedacinho de lógica — você está pronto para escrever uma função. Funções são a primeira ferramenta real para gerenciar complexidade num programa Python.

O formato básico:

main.py
Output
Click Run to see the output here.

Dissecando:

  • def é a palavra-chave que começa a definição de função.
  • greet é o nome da função.
  • (name) é a lista de parâmetros — as entradas que a função recebe.
  • Os dois pontos terminam o cabeçalho; o bloco indentado abaixo é o corpo.
  • greet("Ada") é uma chamada. O Python roda o corpo com name amarrado a "Ada".

Funções ficam adormecidas até serem chamadas. Definir uma não executa. Chamar com greet("Ada") executa.

Parâmetros e argumentos

A palavra parâmetro é o nome dentro da definição da função. A palavra argumento é o valor passado quando você chama. Não é grande coisa na conversa casual, mas a distinção ajuda ao ler mensagens de erro.

main.py
Output
Click Run to see the output here.

Aqui base e exponent são parâmetros. 2 e 10 são argumentos. O Python amarra na ordem: primeiro argumento para primeiro parâmetro, e assim por diante.

return: enviando um valor de volta

print escreve na tela. return devolve um valor para quem chamou, para que possa usar:

main.py
Output
Click Run to see the output here.

Sem return, uma função retorna None por padrão:

main.py
Output
Click Run to see the output here.

return também sai da função imediatamente. Você vai ver retornos antecipados usados para escapar de casos de borda antes da lógica principal:

main.py
Output
Click Run to see the output here.

Retornos antecipados evitam que o corpo principal fique aninhado em if/else.

Argumentos default

Um parâmetro pode ter um valor default, usado quando quem chama não fornece:

main.py
Output
Click Run to see the output here.

Todos os parâmetros com default precisam vir depois dos parâmetros sem default. def f(a, b=1, c): é erro de sintaxe.

A armadilha do default mutável

Essa é a pegadinha mais famosa do Python. Veja:

main.py
Output
Click Run to see the output here.

Você esperaria que cada chamada começasse com uma lista vazia. Em vez disso, a lista default é compartilhada entre as chamadas, e os itens acumulam. O Python avalia o default uma vez, quando a função é definida, e reutiliza aquela lista única para sempre.

O padrão seguro é usar None como default e criar a lista dentro da função:

main.py
Output
Click Run to see the output here.

Agora cada chamada que não passa items recebe uma lista nova. Essa regra se aplica a listas, dicts, sets — qualquer coisa mutável.

Argumentos por palavra-chave

Você pode passar argumentos por nome em vez de posição. Isso permite pular parâmetros do meio e tornar chamadas longas mais legíveis:

main.py
Output
Click Run to see the output here.

Argumentos posicionais e por palavra-chave podem se misturar, mas os posicionais têm que vir primeiro:

main.py
Output
Click Run to see the output here.

Quando uma função tem mais de três ou quatro parâmetros, favorecer argumentos por palavra-chave torna as chamadas muito mais fáceis de ler.

Parâmetros só posicionais e só por palavra-chave

O Python permite marcar alguns parâmetros como chamáveis só por posição (com /) ou só por palavra-chave (com *):

main.py
Output
Click Run to see the output here.

Você não precisa disso no primeiro dia. Ficam úteis quando você está projetando APIs e quer travar como as pessoas usam sua função.

Docstrings e nomeação

A primeira linha dentro de uma função pode ser uma docstring — uma string de aspas triplas que o Python trata como documentação:

main.py
Output
Click Run to see the output here.

Ferramentas como help(), tooltips de IDE e geradores de documentação leem a docstring automaticamente. Uma linha só é muito melhor do que nada.

E, por favor, pense em nomeação:

  • Nomes de função devem ser verbos: fetch_profile, compute_total, is_valid.
  • Use lower_snake_case.
  • Funções que retornam booleano geralmente começam com is_, has_ ou can_.

Um bom nome torna o ponto de chamada autoexplicativo sem precisar de comentário.

Funções puras são mais fáceis de raciocinar

Uma função pura retorna a mesma saída para a mesma entrada e não tem efeitos colaterais — não modifica estado global, não imprime no stdout (exceto para debug) e não escreve em arquivos.

main.py
Output
Click Run to see the output here.

As duas têm seu lugar, mas em código que você quer reutilizar e testar, empurre para funções puras o quanto puder.

Um exemplo pequeno funcional

Uma função rápida que combina defaults, argumentos por palavra-chave e return:

main.py
Output
Click Run to see the output here.

Próxima: listas flexíveis de argumentos

Às vezes você não sabe com quantos argumentos uma função vai ser chamada — ou quer encaminhar quaisquer argumentos que chegarem para outra função. *args e **kwargs lidam com isso. Essa é a próxima página.

Perguntas frequentes

Como defino uma função em Python?

Use a palavra-chave def, seguida do nome da função, parênteses para parâmetros e dois pontos. O bloco indentado abaixo é o corpo da função. Exemplo: def greet(name): print(f'Hi, {name}').

O que o return faz em Python?

return manda um valor de volta para quem chamou a função. Uma função sem return explícito retorna None automaticamente. Uma vez que return roda, a função sai imediatamente — qualquer código depois dele no mesmo bloco é pulado.

O que são argumentos default em Python?

Argumentos default deixam um parâmetro ter um valor pré-definido que é usado se quem chama não fornece um. def greet(name='friend'): significa que greet() sem argumentos usa 'friend'. Nunca use defaults mutáveis como [] — veja abaixo o padrão mais seguro.

Aprenda a programar com o Coddy

COMEÇAR