2.14. Definir funções

Uma função agrupa um bloco de código sob um nome para que possa ser chamada de vários sítios. Sempre que um cálculo, uma ação, ou um trabalho bem definido aparece mais do que uma vez, uma função transforma-o numa única coisa com nome.

A palavra-chave é def:

def greet(name):
    print("hello,", name)

greet("Alice")
greet("Bob")

Resultado:

hello, Alice
hello, Bob

A linha que começa com def é a definição – cria a função mas não executa o corpo. Chamar greet("Alice") é o que executa o bloco indentado.

2.14.1. Parâmetros e argumentos

Os nomes entre parênteses na linha def são parâmetros – marcadores de posição para os valores que o chamador irá fornecer. Os valores reais passados são os argumentos. Uma função pode receber zero ou mais parâmetros:

def square(x):
    return x * x

def add(a, b):
    return a + b

def is_even(n):
    return n % 2 == 0

Uma chamada com o número errado de argumentos levanta TypeError imediatamente.

2.14.2. return

Uma instrução return termina a função imediatamente e devolve um valor ao chamador:

def absolute(x):
    if x < 0:
        return -x
    return x

Uma função que nunca atinge um return (ou tem um return simples sem valor) devolve None:

>>> def shout(text):
...     print(text.upper())
...
>>> result = shout("hi")
HI
>>> print(result)
None

Uma função pode ter vários return; o primeiro a ser atingido vence, e o restante do corpo é ignorado.

2.14.2.1. Devolver múltiplos valores

Python devolve um objeto por chamada, mas esse objeto pode ser um tuple – e o chamador pode desempacotá-lo na mesma linha:

def minmax(values):
    return (min(values), max(values))

lo, hi = minmax([3, 1, 4, 1, 5, 9])

Os parênteses em torno do valor de retorno são opcionais; return a, b e return (a, b) são equivalentes.

2.14.3. Docstrings

Um literal de string colocado como primeira instrução do corpo de uma função é uma docstring. É armazenado no objeto função e é o que help() apresenta:

def scale(value, factor):
    """Multiply ``value`` by ``factor`` and return the result."""
    return value * factor

O IDE mostra as docstrings em dicas de ferramentas quando o cursor paira sobre o nome da função, pelo que mesmo um resumo de uma linha compensa. As strings com aspas triplas permitem que a docstring ocupe várias linhas quando é útil incluir mais detalhes.

2.14.4. Convenções de nomenclatura

Os nomes de funções usam snake_case – palavras em minúsculas separadas por underscores. O nome deve descrever o que a função faz:

  • Bom: read_temperature, parse_header, is_valid.

  • Evitar: do_stuff, handle1, temp_func.

Um underscore inicial (_helper) marca uma função como interna ao seu módulo. A convenção é amplamente respeitada, mas não é aplicada pelo Python.