Lección 10 de 16 · Cuándo se evalúa un default
La trampa del valor por defecto
Ver que el valor por defecto se crea una sola vez, al ejecutar def, y vive pegado a la función.
Metodología · Práctica
Ejemplos con errores (caza del bug)
El código tiene un error real de diseño: encuéntralo en la memoria antes de leer la explicación.
Metodología · Criterio
Pre-mortem y post-mortem (contrafactual)
Antes de ejecutar, imagina que esto ya está en producción y falló: ¿qué reclamo llegó?
t<0 Antes de ejecutar
Lee el código y comprométete con una predicción
Mientras tanto, Python ya hizo su parte de t<0: leyó y compiló el archivo completo. Ninguna variable existe todavía.
programa.py
1def agregar(producto, carrito=[]): 2 carrito.append(producto) 3 return carrito 4 5print(agregar("pan")) 6print(agregar("leche"))
t=0 t>0 Ejecución paso a paso
Qué se ejecuta primero y dónde vive cada variable
Avanza con Siguiente paso o las flechas del teclado. Pasa el mouse por una variable para ver a qué objeto apunta.
t=-1
Antes de ejecutar
Python lee y compila el archivo
1def agregar(producto, carrito=[]):2 carrito.append(producto)3 return carrito4 5print(agregar("pan"))6print(agregar("leche"))
Salida
(vacía)
Qué pasó
- Antes de ejecutar nada, Python lee el archivo completo y lo compila a bytecode: instrucciones que su máquina virtual entiende.
- Si hubiera un error de sintaxis, el programa fallaría aquí, sin ejecutar ni una sola línea.
- Nombres que aparecen en el código: agregar, append, carrito, print, producto. Ninguno existe todavía en memoria.
Pila de marcos · dónde viven los nombres
Todavía no hay marcos: ninguna variable existe.
Montón · dónde viven los objetos
Ningún objeto todavía.
Idea clave
La lista [] se evalúa en la línea 1, una sola vez, y queda guardada en el objeto función. Cada llamada sin carrito usa esa misma lista. En la memoria se ve: la función apunta a su lista por defecto.
t>0 Después: repaso sin mirar
Recupera de memoria
Responde sin volver al paso a paso. Para dominar la lección necesitas 2 de 2.
Explícalo con tus palabras (Feynman)
Dominio de la lección
Aún no
- Falta la predicción (t<0)
- Repaso: 0 de 2 (se necesitan 2)