
Hasta ahora todos nuestros programas estaban formados por una única secuencia de instrucciones. A medida que los programas crecen, esta forma de trabajar hace que el código sea más largo y difícil de entender.
Las funciones permiten dividir un programa en pequeñas tareas independientes que pueden utilizarse siempre que sea necesario. Gracias a ellas, los programas resultan más claros, fáciles de mantener y evitan repetir el mismo código varias veces.
En este capítulo aprenderemos a crear nuestras propias funciones, a enviarles información mediante parámetros y a obtener resultados utilizando return.
1. ¿Qué es una función?
Una función es un conjunto de instrucciones que realiza una tarea concreta y que puede ejecutarse siempre que la necesitemos.
En lugar de escribir varias veces el mismo código, podemos guardarlo dentro de una función y reutilizarlo tantas veces como queramos.
Por ejemplo, imagina que queremos calcular el área de varios rectángulos.
Sin funciones podríamos escribir algo parecido a esto:
base = 5 altura = 3 print(base * altura) base = 8 altura = 4 print(base * altura) base = 12 altura = 7 print(base * altura)
Aunque el programa funciona, estamos repitiendo las mismas instrucciones varias veces. Si quisiéramos modificar la forma de calcular el área, tendríamos que hacerlo en todos los lugares donde aparece ese código.
Con una función bastará con escribir esas instrucciones una sola vez y reutilizarlas siempre que las necesitemos.
Con funciones, ese mismo programa podría escribirse de una forma mucho más sencilla:
# Definimos una función que calcula el área de un rectángulo
def calcular_area(base, altura):
print(base * altura)
# Calculamos el área de un rectángulo de 5 × 3
calcular_area(5, 3)
# Calculamos el área de un rectángulo de 8 × 4
calcular_area(8, 4)
# Calculamos el área de un rectángulo de 12 × 7
calcular_area(12, 7)
Por ahora no te preocupes si no entiendes completamente este código. A lo largo de este capítulo aprenderemos qué significa def, qué son los parámetros (base y altura) y cómo crear nuestras propias funciones. Lo importante es observar que ahora el cálculo del área solo se escribe una vez y puede reutilizarse tantas veces como sea necesario.
Además de las funciones que crearemos nosotros, Python ya incorpora muchas funciones listas para utilizar. Por ejemplo, durante este curso ya hemos utilizado varias:
print() muestra información por pantalla.
print("Hola")
input() solicita información al usuario.
input("Nombre: ")
len() devuelve la longitud de una cadena de texto.
len("Python")
Para saber más: Python incorpora muchas funciones ya preparadas para utilizar. Puedes consultar el listado completo en la documentación oficial: https://docs.python.org/es/3/library/functions.html
A partir de ahora aprenderemos a crear nuestras propias funciones para organizar mejor nuestros programas y evitar repetir código.
Consejo: Si descubres que estás escribiendo varias veces el mismo conjunto de instrucciones, probablemente sea un buen momento para convertirlo en una función.
¿Sabías que…? En los programas profesionales es habitual dividir el código en muchas funciones pequeñas. Esto facilita la lectura del programa, permite reutilizar el código y hace que localizar y corregir errores resulte mucho más sencillo.
2. Definir una función con def
Para crear una función utilizamos la palabra reservada def, seguida del nombre de la función.
La sintaxis básica es la siguiente:
def nombre_funcion():
# Instrucciones de la función
Después del nombre aparecen siempre unos paréntesis () y dos puntos (:). Las instrucciones que pertenecen a la función deben escribirse con sangría, igual que ocurre con las estructuras if o los bucles.
Por ejemplo, podemos crear una función que muestre un mensaje de bienvenida:
def saludar():
print("¡Bienvenido al curso de Python!")
Al ejecutar este programa no aparecerá ningún mensaje en pantalla.
Esto ocurre porque únicamente hemos definido la función, pero todavía no la hemos utilizado.
Importante: Definir una función no significa ejecutarla. Primero la creamos y, cuando la necesitemos, la llamaremos desde otra parte del programa.
Podemos definir tantas funciones como necesitemos en un mismo programa.
Por ejemplo:
def saludar():
print("¡Hola!")
def despedirse():
print("¡Hasta pronto!")
En este caso hemos creado dos funciones diferentes, aunque ninguna de ellas se ejecutará hasta que las llamemos.
3. Reglas para nombrar funciones
Los nombres de las funciones siguen prácticamente las mismas reglas que las variables.
Es recomendable:
- Utilizar únicamente letras, números y el carácter
_. - Comenzar siempre por una letra o por
_. - Escribir el nombre en minúsculas.
- Separar las palabras mediante guiones bajos (
_). - Elegir nombres que describan claramente la tarea que realiza la función.
Por ejemplo:
def calcular_area():
pass
def mostrar_menu():
pass
def pedir_nombre():
pass
En estos ejemplos utilizamos la instrucción pass porque todavía no hemos escrito el contenido de las funciones. Más adelante sustituiremos pass por las instrucciones correspondientes.
En cambio, conviene evitar nombres como:
def f():
pass
def prueba1():
pass
def cosa():
pass
Estos nombres no indican qué hace la función y dificultan la lectura del programa.
Consejo: Elige siempre un nombre que describa claramente la acción que realiza la función. Un programa con nombres descriptivos resulta mucho más fácil de entender y mantener.
4. Llamar a una función
Una vez definida una función, podemos ejecutarla escribiendo su nombre seguido de paréntesis.
Es importante recordar que primero debemos definir la función y después llamarla.
Por ejemplo:
def saludar():
print("¡Bienvenido al curso de Python!")
saludar()
El resultado será:
¡Bienvenido al curso de Python!
Cuando Python encuentra la instrucción saludar(), ejecuta todas las instrucciones que forman parte de esa función.
Una de las principales ventajas de las funciones es que podemos utilizarlas tantas veces como necesitemos sin tener que volver a escribir el mismo código.
Por ejemplo:
def saludar():
print("¡Hola!")
saludar()
saludar()
saludar()
El resultado será:
¡Hola! ¡Hola! ¡Hola!
Cada vez que llamamos a la función, Python vuelve a ejecutar las instrucciones que contiene.
También podemos llamar a una función desde distintos lugares del programa.
Por ejemplo:
def saludar():
print("¡Hola!")
print("Inicio del programa")
saludar()
print("Seguimos trabajando")
saludar()
print("Fin del programa")
El resultado será:
Inicio del programa ¡Hola! Seguimos trabajando ¡Hola! Fin del programa
Como puedes observar, la función se define una sola vez, pero puede ejecutarse tantas veces como sea necesario a lo largo del programa.
Consejo: Es recomendable definir las funciones al principio del archivo y escribir el programa principal después. De este modo el código resulta más ordenado y, además, evitamos errores al intentar llamar a una función que todavía no ha sido definida.
5. Parámetros
Hasta ahora todas las funciones que hemos utilizado hacían siempre exactamente lo mismo. Sin embargo, en muchas ocasiones necesitaremos que una misma función pueda trabajar con datos diferentes. Para conseguirlo utilizamos parámetros.
Un parámetro es una variable que se define entre los paréntesis de una función y que recibe un valor cuando la llamamos. Una función puede recibir cero, uno o varios parámetros.
Por ejemplo, podemos crear una función que salude a cualquier persona:
# Definimos una función con un parámetro
def saludar(nombre):
print("Hola", nombre)
# Llamamos a la función indicando distintos nombres
saludar("Andrea")
saludar("Carlos")
saludar("Lucía")
El resultado será:
Hola Andrea Hola Carlos Hola Lucía
En este ejemplo, nombre es un parámetro.
Cada vez que llamamos a la función, el parámetro recibe un valor diferente.
También podemos utilizar el parámetro varias veces dentro de la función.
Por ejemplo:
def presentar(nombre):
print("Hola", nombre)
print("Bienvenido al curso de Python,", nombre)
presentar("María")
El resultado será:
Hola María Bienvenido al curso de Python, María
Los parámetros permiten reutilizar una misma función para trabajar con distintos datos sin necesidad de escribir varias funciones parecidas.
Una función también puede tener varios parámetros.
Por ejemplo:
def presentar(nombre, edad):
print(nombre, "tiene", edad, "años.")
presentar("Andrea", 41)
presentar("Luis", 18)
El resultado será:
Andrea tiene 41 años. Luis tiene 18 años.
En este caso la función necesita dos parámetros, por lo que al llamarla debemos indicar dos valores y respetar el mismo orden en que aparecen definidos.
Consejo: El número de valores que proporcionamos al llamar a una función debe coincidir con el número de parámetros que hemos definido. Si falta alguno o hay más de los necesarios, Python mostrará un mensaje de error.
¿Sabías que…? Los nombres de los parámetros pueden ser los que nosotros queramos, igual que ocurre con las variables. Es recomendable utilizar nombres descriptivos, como nombre, edad o precio, para que el código resulte más fácil de entender.
6. Funciones que devuelven un valor con return
Hasta ahora nuestras funciones mostraban información por pantalla utilizando print(). Sin embargo, en muchas ocasiones no queremos mostrar directamente el resultado, sino utilizarlo más adelante en el programa.
Para ello utilizamos la instrucción return.
return finaliza la ejecución de la función y devuelve un valor al lugar desde donde fue llamada.
Por ejemplo, podemos crear una función que calcule el área de un rectángulo:
def calcular_area(base, altura):
return base * altura
area = calcular_area(5, 3)
print("El área es", area)
El resultado será:
El área es 15
En este ejemplo, la función no muestra el resultado por pantalla. En su lugar, lo devuelve mediante return para que el programa pueda almacenarlo en la variable area.
También podemos utilizar directamente el valor devuelto por una función.
Por ejemplo:
def calcular_area(base, altura):
return base * altura
print(calcular_area(8, 4))
El resultado será:
32
Importante :return no muestra ningún resultado por pantalla. Devuelve un valor para que pueda utilizarse posteriormente en el programa. Si queremos verlo, tendremos que mostrarlo con print() o almacenarlo en una variable.
7. Diferencia entre print() y return
Aunque ambos pueden aparecer dentro de una función, cumplen funciones muy distintas.
print()es una función que muestra información por pantalla.returnes una instrucción que finaliza la ejecución de una función y devuelve un valor al programa.
Observa el siguiente ejemplo:
def mostrar_numero():
print(5)
def devolver_numero():
return 5
Si ejecutamos:
mostrar_numero()
El resultado será:
5
Sin embargo, si hacemos:
numero = devolver_numero() print(numero + 10)
El resultado será:
15
En el primer caso, el número simplemente se muestra por pantalla.
En el segundo, el número se devuelve mediante return, por lo que podemos almacenarlo en una variable, realizar operaciones con él o utilizarlo en otras funciones.
Consejo: Utiliza return cuando una función deba calcular un resultado que vaya a utilizarse posteriormente. Si únicamente quieres mostrar información al usuario, normalmente bastará con print().
¿Sabías que…? Muchas funciones integradas de Python, como len(), max() o sum(), utilizan return. Por ejemplo, len("Python") no muestra el número 6 en pantalla, sino que lo devuelve para que podamos guardarlo en una variable, realizar operaciones con él o mostrarlo cuando lo necesitemos.
8. Variables locales y variables globales
Las variables pueden crearse dentro o fuera de una función. Según dónde se definan, distinguimos dos tipos:
- Variables locales: se crean dentro de una función y solo pueden utilizarse en ella.
- Variables globales: se crean fuera de las funciones y pueden utilizarse desde cualquier parte del programa.
8.1. Variables locales
Las variables locales únicamente existen mientras se está ejecutando la función.
Por ejemplo:
def mostrar_nombre():
nombre = "Andrea"
print(nombre)
mostrar_nombre()
Resultado:
Andrea
Si intentamos utilizar la variable fuera de la función:
def mostrar_nombre():
nombre = "Andrea"
mostrar_nombre()
print(nombre)
Python mostrará un mensaje parecido a este:
NameError: name 'nombre' is not defined
La variable nombre solo existe dentro de la función.
8.2. Variables globales
Las variables globales se crean fuera de cualquier función.
Por ejemplo:
curso = "Python"
def mostrar_curso():
print(curso)
mostrar_curso()
print(curso)
Resultado:
Python Python
Como la variable curso es global, puede utilizarse tanto dentro como fuera de la función.
Importante: Aunque una función puede utilizar una variable global, no es recomendable abusar de ellas. En este curso intentaremos que la mayoría de las variables sean locales, ya que hacen que los programas sean más fáciles de entender y mantener.
8.3. ¿Cuándo utilizar cada una?
En general:
- Utiliza variables locales cuando la información solo sea necesaria dentro de una función.
- Utiliza variables globales únicamente cuando varias funciones necesiten compartir el mismo dato.
Consejo: Siempre que sea posible, utiliza variables locales. Reducen los errores y hacen que cada función sea más independiente del resto del programa.
¿Sabías que…? En proyectos grandes es habitual evitar el uso de variables globales siempre que sea posible. Las funciones que dependen únicamente de sus parámetros y de sus variables locales son más fáciles de reutilizar, probar y mantener.
9. Errores habituales
Cuando comenzamos a trabajar con funciones es frecuente cometer algunos errores. La siguiente tabla recoge los más habituales y cómo solucionarlos.
| Error | Solución |
|---|---|
| Olvidar los paréntesis al llamar a una función. | Escribir siempre el nombre seguido de (). |
| Llamar a una función antes de definirla. | Definir primero las funciones y escribir el programa principal después. |
| Llamar a una función con un número incorrecto de parámetros. | Comprobar que se proporcionan todos los argumentos necesarios y en el orden adecuado. |
Confundir print() con return. | Recordar que print() muestra información y return devuelve un valor para seguir utilizándolo en el programa. |
| Intentar utilizar una variable local fuera de la función. | Utilizar parámetros y return para intercambiar información entre funciones. |
Escribir return fuera de una función. | La instrucción return solo puede utilizarse dentro de una función. |
Consejo: Si una función no funciona como esperabas, comprueba primero cómo la estás llamando. Muchos errores se producen porque falta un parámetro, sobran argumentos o se intenta utilizar una variable fuera de su ámbito.
Ya sabemos crear nuestras propias funciones, utilizar parámetros y valores de retorno para reutilizar código y organizar mejor nuestros programas. A partir de ahora aplicaremos las funciones siempre que una tarea se repita, ya que son una de las herramientas más importantes para desarrollar programas claros, ordenados y fáciles de mantener.
En el siguiente capítulo resolveremos una colección de problemas de programación que integran todos los conocimientos adquiridos hasta el momento, incluyendo variables, operadores, estructuras condicionales, bucles y funciones.
10. Actividad
Crea un archivo llamado funciones.py.
Realiza los siguientes ejercicios.
10.1. Crear una función sencilla
Crea una función llamada saludar() que muestre el mensaje:
¡Bienvenido al curso de Python!
Llámala dos veces desde el programa principal.
10.2. Utilizar parámetros
Crea una función llamada presentar(nombre) que reciba un nombre como parámetro y muestre un saludo personalizado.
Por ejemplo:
Hola Andrea
Llama a la función utilizando al menos tres nombres diferentes.
10.3. Utilizar return
Crea una función llamada cuadrado(numero) que devuelva el cuadrado del número recibido.
Guarda el resultado en una variable y muéstralo por pantalla.
Por ejemplo:
El cuadrado es 49
10.4. Variables locales
Crea una función que almacene un número en una variable local y lo muestre por pantalla.
Después, intenta mostrar esa misma variable fuera de la función.
No intentes corregir el error. Simplemente observa el mensaje que muestra Python e intenta explicar por qué se produce.
10.5. Integrar todo
Crea una función llamada calcular_media(nota1, nota2, nota3) que devuelva la media de tres notas.
Después:
- Guarda el resultado en una variable.
- Muéstralo por pantalla.
- Indica si el alumnado ha aprobado o suspendido utilizando una estructura
if.
Ejemplo de salida:
Media: 7.3 Aprobado
Objetivo: aprender a definir y utilizar funciones, trabajar con parámetros y valores devueltos mediante return, comprender el ámbito de las variables y reutilizar código para crear programas más organizados.
11. Prácticas resueltas
Los siguientes ejercicios permiten practicar la definición y utilización de funciones. Intenta resolverlos antes de consultar la solución.
11.1. Mostrar un mensaje varias veces
Crea una función llamada titulo() que muestre el siguiente texto:
=== Calculadora ===
Llama a la función antes y después de mostrar el mensaje:
Fin del programa
Solución
def titulo():
print("=== Calculadora ===")
titulo()
print("Fin del programa")
titulo()
11.2. Calcular el precio con IVA
Crea una función llamada calcular_precio(precio) que reciba el precio de un producto y devuelva su precio con un 21 % de IVA.
Solución
def calcular_precio(precio):
return precio * 1.21
precio_final = calcular_precio(100)
print("Precio final:", precio_final)
11.3. Comprobar si una persona puede votar
Crea una función llamada puede_votar(edad) que devuelva True si la persona tiene 18 años o más y False en caso contrario.
Solución
def puede_votar(edad):
return edad >= 18
print(puede_votar(20))
print(puede_votar(15))
11.4. Mostrar la tabla de multiplicar de un número
Crea una función llamada tabla(numero) que muestre la tabla de multiplicar de un número del 1 al 10.
Solución
def tabla(numero):
for i in range(1, 11):
print(numero, "x", i, "=", numero * i)
tabla(5)
11.5. Contar hacia atrás
Crea una función llamada cuenta_atras(inicio) que muestre una cuenta atrás desde el número indicado hasta 1.
Solución
def cuenta_atras(inicio):
while inicio >= 1:
print(inicio)
inicio = inicio - 1
cuenta_atras(5)
12. Test de autoevaluación
12.1. ¿Para qué se utiliza una función en Python?
a) Para repetir siempre el mismo programa.
b) Para organizar y reutilizar código. ✅
c) Para crear variables.
d) Para sustituir los bucles.
Retroalimentación: Las funciones permiten organizar el código y reutilizar instrucciones sin necesidad de escribirlas varias veces.
12.2. ¿Qué palabra clave se utiliza para definir una función?
a) function
b) create
c) def ✅
d) func
Retroalimentación: Todas las funciones definidas por la persona programadora comienzan con la palabra reservada def.
12.3. ¿Qué mostrará este programa?
def saludo():
print("Hola")
saludo()
a) Hola ✅
b) saludo
c) Error
d) No muestra nada
Retroalimentación: La llamada a la función ejecuta las instrucciones que contiene.
12.4. ¿Qué son los parámetros de una función?
a) Variables que recibe la función para trabajar con ellas. ✅
b) Variables globales.
c) Comentarios del programa.
d) Instrucciones return.
Retroalimentación: Los parámetros permiten que una misma función pueda trabajar con distintos valores.
12.5. ¿Qué devuelve este programa?
def sumar(a, b):
return a + b
print(sumar(3, 5))
a) 8 ✅
b) 35
c) sumar
d) Error
Retroalimentación: La función devuelve la suma de los dos parámetros.
12.6. ¿Qué hace la instrucción return?
a) Muestra un dato por pantalla.
b) Finaliza la función y devuelve un valor. ✅
c) Repite la función.
d) Cierra el programa.
Retroalimentación: return permite devolver un resultado para seguir utilizándolo en el programa.
12.7. ¿Qué ocurre si llamamos a una función antes de definirla?
a) La función se ejecuta normalmente.
b) Python produce un error. ✅
c) La función devuelve None.
d) Python crea automáticamente la función.
Retroalimentación: En este curso definimos las funciones antes de utilizarlas.
12.8. ¿Qué tipo de variable solo existe dentro de una función?
a) Variable global.
b) Variable local. ✅
c) Variable constante.
d) Variable lógica.
Retroalimentación: Las variables locales solo existen mientras se ejecuta la función.
12.9. ¿Qué mostrará este programa?
def multiplicar(a, b):
return a * b
resultado = multiplicar(4, 6)
print(resultado)
a) 24 ✅
b) 10
c) multiplicar
d) Error
Retroalimentación: La función devuelve el producto de ambos números, que se guarda en la variable resultado.
12.10. ¿Cuál de estas llamadas a una función es correcta?
Si la función está definida así:
def saludar(nombre):
a) saludar().
b) saludar(nombre).
c) saludar("Ana"). ✅
d) nombre.saludar().
Retroalimentación: La función necesita recibir un argumento para el parámetro nombre.
12.11. ¿Cuál de estas afirmaciones sobre las funciones es correcta?
a) Solo pueden llamarse una vez.
b) Deben escribirse siempre al final del programa.
c) Pueden utilizarse tantas veces como sea necesario. ✅
d) Solo pueden tener un parámetro.
Retroalimentación: Una de las principales ventajas de las funciones es que pueden reutilizarse.
12.12. ¿Qué diferencia existe entre print() y return?
a) Ninguna.
b) print() muestra información y return devuelve un valor. ✅
c) return muestra información y print() devuelve un valor.
d) Ambos finalizan la función.
Retroalimentación: print() es una función que muestra información; return es una instrucción que devuelve un valor.
12.13. ¿Qué mostrará este programa?
def mostrar():
print("Python")
mostrar()
mostrar()
a)
Python Python
✅
b)
Python
c) Error
d) No muestra nada
Retroalimentación: La función se ejecuta una vez por cada llamada.
12.14. ¿Qué ventaja tiene utilizar funciones?
a) Reducen la reutilización del código.
b) Permiten escribir programas más organizados y fáciles de mantener. ✅
c) Eliminan la necesidad de utilizar variables.
d) Sustituyen a las estructuras condicionales.
Retroalimentación: Dividir un programa en funciones facilita su lectura, reutilización y mantenimiento.
12.15. ¿Qué afirmación es verdadera?
a) Una función siempre debe devolver un valor.
b) Todas las variables son globales.
c) Una función puede recibir parámetros y devolver un resultado. ✅
d) Solo existe una función en cada programa.
Retroalimentación: Una función puede recibir información mediante parámetros y devolver un resultado utilizando return.
13. Actividad de ampliación
Python incorpora cientos de funciones y módulos que permiten realizar tareas sin necesidad de programarlas desde cero.
Investiga la documentación oficial de Python y responde a las siguientes cuestiones:
- ¿Qué es la biblioteca estándar de Python?
- Busca dos funciones o dos módulos que te parezcan interesantes y explica brevemente para qué sirven.
- ¿Qué módulo utilizarías para generar números aleatorios?
- ¿Qué módulo permite trabajar con fechas y horas?
Como apoyo a tu investigación, consulta la documentación oficial de Python:
https://docs.python.org/es/3/library/index.html
Objetivo: conocer que Python incorpora una amplia colección de funciones y módulos ya preparados para resolver tareas habituales, evitando tener que programarlas desde cero.