beginner⏱30 minutosLección 9 de 10
Funciones y Ámbito (Scope)
Crea código reutilizable con funciones: parámetros, valores de retorno, ámbito, argumentos por defecto y mejores prácticas
Funciones y Ámbito (Scope)
Las funciones son bloques de código reutilizables que realizan una tarea específica. Te ayudan a organizar el código, evitar la repetición y construir programas complejos a partir de piezas simples.
Definiendo y Llamando Funciones
python
def greet():
print("Hello, World!")
greet() # Llamar a la funciónParámetros y Argumentos
python
def greet(name):
print(f"Hello, {name}!")
greet("Alice") # "Hello, Alice!"Múltiples Parámetros
python
def add(a, b):
result = a + b
return result
sum_result = add(5, 3) # 8La Sentencia return
Las funciones pueden devolver valores (o None por defecto):
python
def square(x):
return x * x
result = square(4) # 16
# Múltiples valores de retorno (como tupla)
def divide(a, b):
quotient = a // b
remainder = a % b
return quotient, remainder
q, r = divide(17, 5) # q=3, r=2Argumentos por Defecto
python
def greet(name, greeting="Hello"):
return f"{greeting}, {name}!"
print(greet("Alice")) # "Hello, Alice!"
print(greet("Bob", "Hi")) # "Hi, Bob!"Warning
¡Nunca uses argumentos por defecto mutables (listas, dicts)! Se crean una vez y se comparten entre llamadas.
python
def bad_append(item, list=[]): # ¡Incorrecto!
list.append(item)
return list
def good_append(item, list=None): # Correcto
if list is None:
list = []
list.append(item)
return listArgumentos por Palabra Clave
python
def create_user(name, age, country):
return f"{name}, {age}, from {country}"
# Posicional
user1 = create_user("Alice", 25, "USA")
# Por palabra clave (el orden no importa)
user2 = create_user(age=30, country="Canada", name="Bob")Ámbito de Variables (Scope)
Ámbito Local
python
def my_func():
x = 10 # Variable local
print(x)
my_func() # 10
print(x) # NameError! x no está definidaÁmbito Global
python
x = 10 # Variable global
def my_func():
print(x) # Puede leer la global
my_func() # 10Modificando Globales (¡Usar con Moderación!)
python
count = 0
def increment():
global count
count += 1
increment()
print(count) # 1Note
Indicadores de Tipo (Documentación)
python
def add(a: int, b: int) -> int:
return a + b
def greet(name: str) -> str:
return f"Hello, {name}"
def process(items: list[str]) -> None:
for item in items:
print(item)Docstrings
Documenta lo que hace tu función:
python
def calculate_bmi(weight: float, height: float) -> float:
"""Calculate Body Mass Index.
Args:
weight: Weight in kilograms
height: Height in meters
Returns:
BMI value
"""
return weight / (height ** 2)Ejemplo del Mundo Real: Funciones de Procesamiento de Datos
python
def clean_text(text: str) -> str:
"""Remove punctuation and normalize whitespace."""
import string
for char in string.punctuation:
text = text.replace(char, "")
return " ".join(text.split())
def word_frequency(text: str) -> dict:
"""Count word frequency in text."""
words = clean_text(text).lower().split()
freq = {}
for word in words:
freq[word] = freq.get(word, 0) + 1
return freq
def top_words(freq: dict, n: int = 5) -> list:
"""Return the n most common words."""
return sorted(freq.items(), key=lambda x: x[1], reverse=True)[:n]
# Uso
text = "Hello world! Hello everyone. Welcome to the world of Python."
freq = word_frequency(text)
print(top_words(freq))Success
Las funciones son los bloques de construcción del código mantenible: ocultan complejidad, previenen la repetición y hacen tus programas modulares.
Preguntas de Práctica
- Escribe una función que tome dos números y devuelva su producto.
- ¿Cuál es la diferencia entre
printyreturnen una función? - ¿Qué sucede si una función no tiene una sentencia return?
- ¿Por qué
def func(x=[])es problemático? - Escribe una función con indicadores de tipo que convierta Celsius a Fahrenheit.
- ¿Cuál es el ámbito de una variable definida dentro de una función?
- ¿Cómo devuelves múltiples valores desde una función?
- Escribe una función recursiva que calcule el factorial.
- ¿Qué hace
globaldentro de una función? - Escribe un docstring para una función que valide una dirección de correo electrónico.
Progreso90%