Cristhian Villegas
Backend10 min read0 views

Curso Python #4: Funciones — Organiza y Reutiliza tu Codigo

Curso Python #4: Funciones — Organiza y Reutiliza tu Codigo

Introduccion: que son las funciones y por que usarlas

Bienvenido a la Parte 4 de 10 del curso de Python para principiantes. En el articulo anterior aprendiste a usar condicionales y bucles para controlar el flujo de tu programa. Ahora vamos a aprender algo que cambiara tu forma de programar para siempre: las funciones.

Logo de Python

Imagina que tienes una receta de cocina favorita. Cada vez que quieres preparar ese platillo, no reinventas la receta desde cero — simplemente la sigues paso a paso. Una funcion en Python es exactamente eso: un conjunto de instrucciones con un nombre que puedes reutilizar cuantas veces quieras sin tener que escribir el mismo codigo una y otra vez.

Las funciones te ayudan a:

  • No repetir codigo: escribes la logica una vez y la usas muchas veces
  • Organizar tu programa: divides un problema grande en partes pequenas y manejables
  • Facilitar el mantenimiento: si necesitas cambiar algo, lo cambias en un solo lugar
  • Hacer tu codigo mas legible: un nombre de funcion descriptivo dice que hace sin leer los detalles

Definir una funcion con def

Para crear una funcion en Python usas la palabra clave def, seguida del nombre de la funcion, parentesis y dos puntos:

python
1# Definir la funcion
2def saludar():
3    print("¡Hola! Bienvenido al programa")
4    print("Espero que tengas un excelente dia")
5
6# Llamar (usar) la funcion
7saludar()
8saludar()  # Puedes llamarla cuantas veces quieras

Salida:

bash
1¡Hola! Bienvenido al programa
2Espero que tengas un excelente dia
3¡Hola! Bienvenido al programa
4Espero que tengas un excelente dia
📌 Importante: Definir una funcion no la ejecuta. Solo la "registra" en la memoria. Para que se ejecute, debes llamarla escribiendo su nombre seguido de parentesis: saludar().

Reglas para nombrar funciones:

  • Usa nombres descriptivos: calcular_promedio es mejor que cp
  • Usa minusculas y guiones bajos: mi_funcion (no MiFuncion)
  • El nombre debe indicar que hace la funcion: enviar_correo, calcular_area, validar_edad

Parametros y argumentos

Las funciones se vuelven realmente utiles cuando les puedes enviar informacion. Esa informacion se llama parametros (cuando defines la funcion) y argumentos (cuando la llamas).

python
1# "nombre" es un parametro
2def saludar_persona(nombre):
3    print(f"¡Hola, {nombre}! ¿Como estas?")
4
5# "Ana" y "Carlos" son argumentos
6saludar_persona("Ana")
7saludar_persona("Carlos")

Salida:

bash
1¡Hola, Ana! ¿Como estas?
2¡Hola, Carlos! ¿Como estas?

Puedes tener multiples parametros separados por comas:

python
1def presentar(nombre, edad, ciudad):
2    print(f"Me llamo {nombre}, tengo {edad} anos y vivo en {ciudad}")
3
4presentar("Laura", 25, "Guadalajara")
5presentar("Miguel", 30, "Monterrey")
💡 Tip: Piensa en los parametros como "huecos" que la funcion necesita que llenes con informacion cada vez que la llamas. Si la funcion tiene 3 parametros, debes pasarle 3 argumentos.

Retornar valores con return

Hasta ahora nuestras funciones solo imprimen texto. Pero muchas veces necesitas que una funcion calcule algo y te devuelva el resultado. Para eso usas return:

python
1def sumar(a, b):
2    resultado = a + b
3    return resultado
4
5# Guardar el resultado en una variable
6total = sumar(5, 3)
7print(f"La suma es: {total}")  # La suma es: 8
8
9# Tambien puedes usarlo directamente
10print(sumar(10, 20))  # 30

La diferencia entre print y return es muy importante:

print()return
Muestra un texto en la pantallaDevuelve un valor a quien llamo la funcion
No puedes guardar lo que imprime en una variablePuedes guardar el resultado en una variable
La funcion sigue ejecutandose despues del printLa funcion termina inmediatamente despues del return
python
1def es_mayor_de_edad(edad):
2    if edad >= 18:
3        return True
4    else:
5        return False
6
7# Usar el resultado en un condicional
8if es_mayor_de_edad(20):
9    print("Puede entrar")
10else:
11    print("No puede entrar")
⚠️ Cuidado: Cuando Python llega a un return, la funcion termina inmediatamente. Cualquier codigo despues del return no se ejecutara.

Valores por defecto en parametros

Puedes darle a un parametro un valor por defecto. Si al llamar la funcion no le pasas ese argumento, usara el valor por defecto:

python
1def saludar(nombre, saludo="Hola"):
2    print(f"{saludo}, {nombre}!")
3
4saludar("Ana")              # Hola, Ana!
5saludar("Carlos", "Buenos dias")  # Buenos dias, Carlos!

Esto es muy util para funciones que tienen opciones "opcionales":

python
1def crear_perfil(nombre, edad, pais="Mexico"):
2    print(f"Nombre: {nombre}")
3    print(f"Edad: {edad}")
4    print(f"Pais: {pais}")
5    print()
6
7crear_perfil("Laura", 25)             # Usa "Mexico" por defecto
8crear_perfil("John", 30, "Estados Unidos")  # Usa el pais que le pasamos
📌 Regla importante: Los parametros con valor por defecto siempre deben ir al final. Esto no es valido: def funcion(pais="Mexico", nombre). Lo correcto es: def funcion(nombre, pais="Mexico").

Argumentos con nombre (keyword arguments)

Cuando llamas una funcion, normalmente pasas los argumentos en orden. Pero tambien puedes usar el nombre del parametro para ser mas claro:

python
1def crear_cuenta(usuario, correo, plan="basico"):
2    print(f"Usuario: {usuario}")
3    print(f"Correo: {correo}")
4    print(f"Plan: {plan}")
5
6# Por posicion (el orden importa)
7crear_cuenta("ana123", "[email protected]", "premium")
8
9# Por nombre (el orden no importa)
10crear_cuenta(correo="[email protected]", usuario="carlos456", plan="pro")

Los argumentos con nombre hacen tu codigo mas legible, especialmente cuando una funcion tiene muchos parametros. Queda claro que significa cada valor.

Alcance de variables (scope): local vs global

El alcance (scope) de una variable determina donde puedes usarla. Hay dos tipos principales:

Variables locales

Una variable creada dentro de una funcion solo existe dentro de esa funcion. Cuando la funcion termina, la variable desaparece:

python
1def mi_funcion():
2    mensaje = "Hola desde la funcion"  # Variable LOCAL
3    print(mensaje)
4
5mi_funcion()
6# print(mensaje)  # ERROR: "mensaje" no existe fuera de la funcion

Variables globales

Una variable creada fuera de cualquier funcion es global y se puede leer desde cualquier lugar:

python
1nombre_app = "Mi Programa"  # Variable GLOBAL
2
3def mostrar_bienvenida():
4    print(f"Bienvenido a {nombre_app}")  # Puede LEER la variable global
5
6mostrar_bienvenida()
⚠️ Buena practica: Evita modificar variables globales dentro de funciones. Si necesitas que una funcion produzca un resultado, usa return. Modificar variables globales hace que tu codigo sea dificil de entender y mantener.

Ejemplo que muestra la diferencia:

python
1x = 10  # Variable global
2
3def cambiar_x():
4    x = 20  # Esto crea una variable LOCAL llamada "x"
5    print(f"Dentro de la funcion: x = {x}")
6
7cambiar_x()
8print(f"Fuera de la funcion: x = {x}")  # Sigue siendo 10

Salida:

bash
1Dentro de la funcion: x = 20
2Fuera de la funcion: x = 10

Funciones lambda

Una funcion lambda es una funcion pequena y anonima que se escribe en una sola linea. Es util para operaciones simples que no necesitan un nombre:

python
1# Funcion normal
2def doble(x):
3    return x * 2
4
5# Misma funcion como lambda
6doble_lambda = lambda x: x * 2
7
8print(doble(5))         # 10
9print(doble_lambda(5))  # 10

Las lambdas son especialmente utiles cuando necesitas pasar una funcion pequena como argumento a otra funcion:

python
1# Ordenar una lista de tuplas por el segundo elemento
2estudiantes = [("Ana", 85), ("Carlos", 92), ("Maria", 78)]
3estudiantes_ordenados = sorted(estudiantes, key=lambda x: x[1])
4print(estudiantes_ordenados)
5# [('Maria', 78), ('Ana', 85), ('Carlos', 92)]
6
7# Filtrar numeros pares de una lista
8numeros = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
9pares = list(filter(lambda x: x % 2 == 0, numeros))
10print(pares)  # [2, 4, 6, 8, 10]
💡 Tip: Usa lambda solo para funciones muy simples (una expresion). Si la logica es compleja, es mejor usar una funcion normal con def porque sera mas facil de leer y mantener.

Funciones utiles integradas en Python

Python viene con muchas funciones ya creadas que puedes usar sin importar nada. Aqui las mas utiles para principiantes:

python
1# len() - Longitud de una secuencia
2print(len("Python"))         # 6
3print(len([1, 2, 3, 4, 5]))  # 5
4
5# max() y min() - Valor maximo y minimo
6print(max(10, 25, 3, 47))     # 47
7print(min(10, 25, 3, 47))     # 3
8print(max([85, 92, 78, 95]))  # 95
9
10# sum() - Suma de una secuencia
11notas = [85, 92, 78, 95, 88]
12print(sum(notas))  # 438
13
14# sorted() - Ordenar una secuencia
15numeros = [5, 2, 8, 1, 9, 3]
16print(sorted(numeros))              # [1, 2, 3, 5, 8, 9]
17print(sorted(numeros, reverse=True))  # [9, 8, 5, 3, 2, 1]
18
19# abs() - Valor absoluto
20print(abs(-15))   # 15
21print(abs(7))     # 7
22
23# round() - Redondear
24print(round(3.14159, 2))  # 3.14
25print(round(7.5))         # 8

Ejemplo combinando varias funciones para calcular estadisticas:

python
1notas = [85, 92, 78, 95, 88, 70, 100]
2
3print(f"Total de notas: {len(notas)}")
4print(f"Nota mas alta: {max(notas)}")
5print(f"Nota mas baja: {min(notas)}")
6print(f"Suma total: {sum(notas)}")
7print(f"Promedio: {round(sum(notas) / len(notas), 2)}")
8print(f"Notas ordenadas: {sorted(notas)}")

Ejemplo practico: calculadora completa

Vamos a crear una calculadora que use funciones para cada operacion. Este ejemplo combina todo lo que aprendiste en este articulo:

python
1def sumar(a, b):
2    return a + b
3
4def restar(a, b):
5    return a - b
6
7def multiplicar(a, b):
8    return a * b
9
10def dividir(a, b):
11    if b == 0:
12        return "Error: no se puede dividir entre cero"
13    return a / b
14
15def mostrar_menu():
16    print("
17=== Calculadora Python ===")
18    print("1. Sumar")
19    print("2. Restar")
20    print("3. Multiplicar")
21    print("4. Dividir")
22    print("5. Salir")
23
24def obtener_numeros():
25    num1 = float(input("Primer numero: "))
26    num2 = float(input("Segundo numero: "))
27    return num1, num2
28
29# Programa principal
30while True:
31    mostrar_menu()
32    opcion = input("
33Elige una opcion (1-5): ")
34
35    if opcion == "5":
36        print("¡Hasta luego!")
37        break
38
39    if opcion not in ["1", "2", "3", "4"]:
40        print("Opcion no valida. Intenta de nuevo.")
41        continue
42
43    num1, num2 = obtener_numeros()
44
45    if opcion == "1":
46        resultado = sumar(num1, num2)
47        print(f"{num1} + {num2} = {resultado}")
48    elif opcion == "2":
49        resultado = restar(num1, num2)
50        print(f"{num1} - {num2} = {resultado}")
51    elif opcion == "3":
52        resultado = multiplicar(num1, num2)
53        print(f"{num1} * {num2} = {resultado}")
54    elif opcion == "4":
55        resultado = dividir(num1, num2)
56        print(f"{num1} / {num2} = {resultado}")
📌 ¿Que hace este programa?
  • Define una funcion para cada operacion matematica (sumar, restar, multiplicar, dividir)
  • Usa mostrar_menu() para mantener la interfaz organizada
  • Usa obtener_numeros() para evitar repetir la lectura de numeros
  • La funcion dividir maneja el caso especial de division entre cero
  • Usa un bucle while True con break para que el usuario pueda hacer varias operaciones

Resumen y proximo articulo

En este articulo aprendiste a organizar tu codigo con funciones:

  • def: define una funcion con un nombre reutilizable
  • Parametros y argumentos: permiten enviar informacion a la funcion
  • return: devuelve un resultado al codigo que llamo la funcion
  • Valores por defecto: parametros opcionales con un valor predefinido
  • Keyword arguments: argumentos con nombre para mayor claridad
  • Scope: las variables locales viven dentro de la funcion, las globales fuera
  • Lambda: funciones anonimas de una linea para operaciones simples
  • Funciones integradas: len(), max(), min(), sum(), sorted(), abs()

Las funciones son una de las herramientas mas importantes de cualquier lenguaje de programacion. A partir de ahora, cada vez que veas codigo repetido, piensa: "esto deberia ser una funcion". En el proximo articulo (Parte 5 de 10) aprenderemos sobre listas, tuplas y diccionarios: las estructuras de datos que te permitiran almacenar y organizar colecciones de informacion.

Share:
CV

Cristhian Villegas

Software Engineer specializing in Java, Spring Boot, Angular & AWS. Building scalable distributed systems with clean architecture.

Comments

Sign in to leave a comment

No comments yet. Be the first!

Related Articles