Python esencial · #4 de 11

Funciones + alcance

Lógica reutilizable y código limpio

Por qué importa

Las funciones mantienen tu lógica reutilizable, comprobable y legible.

La idea

Una función es un miniprograma: entrada → procesamiento → salida. Los argumentos por defecto convierten una función en muchas; *args / **kwargs la vuelven variádica. El alcance sigue la regla LEGB: Local → Envolvente (Enclosing) → Global → Integrado (Built-in).

Pruébalo

Argumentos por defecto + argumentos por palabra clave:

def greet(name, greeting="Hello"):
  return f"{greeting}, {name}!"

print(greet("Ada"))
print(greet("Linus", greeting="Hi"))
print(greet(greeting="Howdy", name="Margaret"))
not loaded

*args / **kwargs capturan los argumentos posicionales y por palabra clave sobrantes:

def describe(*things, **labels):
  for t in things:
      print("-", t)
  for k, v in labels.items():
      print(k, "=", v)

describe("apple", "banana", "cherry", colour="red", taste="sweet")
not loaded

Alcance: una función ve los nombres externos pero no puede re-vincularlos sin nonlocal / global:

counter = 0
def inc():
  global counter
  counter += 1

inc(); inc(); inc()
print("counter:", counter)

def outer():
  x = 1
  def inner():
      nonlocal x
      x += 10
  inner()
  print("outer.x:", x)

outer()
not loaded

Patrones de funciones según el tipo de dato

La forma de una función suele seguir el tipo sobre el que trabaja. Estos tres patrones conectan directamente con las lecciones de estructuras de datos:

Verificación rápida

Mini ejercicios

Buenas y malas prácticas

Errores comunes

Conclusiones clave