2.14. Definición de funciones

Una función empaqueta un bloque de código bajo un nombre para que pueda llamarse desde muchos lugares. Dondequiera que un cálculo, una acción o una pieza de trabajo bien delimitada aparezca más de una vez, una función la convierte en una única cosa con nombre.

La palabra clave es def:

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

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

Salida:

hello, Alice
hello, Bob

La línea que comienza con def es la definición: crea la función pero no ejecuta el cuerpo. Llamar a greet("Alice") es lo que ejecuta el bloque indentado.

2.14.1. Parámetros y argumentos

Los nombres entre paréntesis en la línea def son parámetros: marcadores de posición para los valores que proporcionará quien llame. Los valores reales que se pasan son argumentos. Una función puede tomar cero o más parámetros:

def square(x):
    return x * x

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

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

Una llamada con el número incorrecto de argumentos lanza TypeError de inmediato.

2.14.2. return

Una instrucción return finaliza la función de inmediato y devuelve un valor a quien llamó:

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

Una función que nunca alcanza un return (o que tiene un return pelado sin valor) devuelve None:

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

Una función puede tener varias instrucciones return; gana la primera que se alcanza, y el resto del cuerpo se omite.

2.14.2.1. Devolver varios valores

Python devuelve un objeto por llamada, pero ese objeto puede ser una tuple, y quien llama puede desempaquetarla en el momento:

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

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

Los paréntesis alrededor del valor de retorno son opcionales; return a, b y return (a, b) son lo mismo.

2.14.3. Docstrings

Un literal de cadena colocado como la primera instrucción del cuerpo de una función es un docstring. Se almacena en el objeto de la función y es lo que muestra help():

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

El IDE muestra los docstrings en los tooltips cuando el cursor pasa sobre el nombre de la función, así que incluso un resumen de una línea vale la pena. Las cadenas con triples comillas permiten que el docstring abarque varias líneas cuando es útil dar más detalle.

2.14.4. Convenciones de nomenclatura

Los nombres de funciones usan snake_case: palabras en minúscula separadas por guiones bajos. El nombre debe describir lo que hace la función:

  • Bien: read_temperature, parse_header, is_valid.

  • Evita: do_stuff, handle1, temp_func.

Un guion bajo inicial (_helper) marca una función como interna de su módulo. La convención se respeta ampliamente, pero Python no la impone.