Saltar a contenido

Funciones de usuario

Funciones

En un programa hay cuatro tipos de funciones:

  • las funciones built-in proporcionadas por el propio lenguaje Python:

    print("Hola")
    
  • las funciones de la biblioteca estándar. Por ejemplo, para averiguar cual es nuestro sistema operativo, escribimos:

    >>> import platform
    >>> platform.system()
        Linux
    
  • funciones de bibliotecas de terceros que instalemos en nuestra computadora. Por ejemplo, la biblioteca pygame permite crear juegos 3D

  • funciones creadas por nosotros.

Como crear una función

Supongamos que escribimos el siguiente programa:

saludar("Ana")
saludar("Juan")
saludar("Luis")

Lo que muestra

Hola, Ana
Hola, Juan
Hola, Luis

La función saludar debe recibir un texto como argumento y mostrar un saludo. La definimos de la siguiente forma:

Saludar.py
1
2
3
4
5
6
7
def saludar(nombre):
    texto = "Hola, "+nombre
    print(texto)

saludar("Ana")
saludar("Juan")
saludar("Luis")

La definición de una función tiene dos partes:

  • una línea de cabecera, que comienza con la palabra def, seguida del nombre de la función y, entre paréntesis, una lista de variables receptoras de argumentos. Esta línea finaliza con dos puntos :

  • un cuerpo de sentencias a ejecutar cada vez que se invoca la función. El bloque ha de estar sangrado.

Las funciones deben definirse antes de ser invocadas. En el ejemplo, primero creamos la función saludar() y posteriormente la llamamos tres veces.

Parámetros

Toda función puede recibir argumentos, que almacenará en las variables que definamos entre paréntesis. En el ejemplo anterior, definimos una variable llamada "nombre". Nos limitamos a establecer el nombre de la variable, sin asignarle un valor, ya que la variable está concebida para almacenar el valor recibido.

A las variables destinadas a almacenar los argumentos recibidos por una función, se las llama parámetros. Una función puede definirse con varios parámetros:

Saludar2.py
1
2
3
4
5
6
7
def saludar(nombre, apellido):
    texto = "Hola, "+nombre+" "+apellido
    print(texto)

saludar("Ana", "López")
saludar("Juan", "García")
saludar("Iker", "Pérez")

Si no se prevé recibir argumentos, se escriben paréntesis vacíos

def saludar():
    print("Hola")

Funciones que devuelven un resultado:

Una función puede devolver un resultado

Perimetro.py
1
2
3
4
5
6
7
def perimetro(r)
    pi = 3.14159
    p = r * pi * 2
    return p

radio = 5
print(perimetro(radio))

La sentencia return establece el valor a devolver. Si no va acompañada de nada, se limita a finalizar la ejecución de la función:

def saludar():
    print("Hola")
    return

De todas formas, toda función concluye su ejecución al llegar a la última sentencia, por lo que en este caso, no sería necesaria la sentencia return. Pero puede ser útil para finalizar anticipadamente:

NumerosPrimos.py
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
def es_primo(numero):
    for divisor in range(2,numero):
        if (numero%divisor) == 0:     # divisible por otro numero
            return False
    return True

limite = 100
primos = []

for n in range(2,100):
    if es_primo(n):
        primos.append(n)

print(primos)

esto muestra una lista con los números primos menores de 100:

[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 
61, 67, 71, 73, 79, 83, 89, 97]

Argumentos por nombre

Las funciones se pueden invocar pasando el nombre del parámetro en el caso de algún argumento (o de todos):

Saludar2.py
1
2
3
4
5
6
7
def saludar(nombre, apellido):
    texto = "Hola, "+nombre+" "+apellido
    print(texto)

saludar("Ana", apellido="López")
saludar("Juan", "García")
saludar("Iker", "Pérez")

Esto permite escribir los argumentos en un orden diferente del previsto:

saludar(apellido="López", nombre="Ana")

Por lo tanto, una función puede invocarse de tres formas:

  • indicando el nombre de todos los parámetros
  • con todos los argumentos sin nombre. Se asignan según su posición.
  • con algunos argumentos posicionales y otros por nombre

En el tercer caso, los argumentos posicionales han de ir en primer lugar, y corresponderse con los primeros parámetros.

Parámetros opcionales

Los argumentos pueden omitirse, si en la definición de la función establecemos un valor por defecto:

Saludar3.py
1
2
3
4
5
6
7
def saludar(nombre, saludo="Hola"):
    texto = saludo+", "+nombre
    print(texto)

saludar("Ana", saludo="Buenos días")
saludar("Juan")
saludar("Iker")

Lo que muestra:

Buenos días, Ana
Hola, Juan
Hola, Iker

Los parámetros obligatorios deben definirse antes que los opcionales.