¿Por qué una variable creada dentro de una función no existe fuera de ella? Eso es el SCOPE: la regla de
dónde "vive" y es visible cada variable. Entenderlo evita una clase entera de bugs confusos. Y de paso
aprendes dos marcas de código profesional: los DOCSTRINGS (documentar qué hace una función) y las
anotaciones de tipo (decir qué tipos espera y devuelve). Hoy tus funciones se vuelven claras, seguras y
bien documentadas.
Cada cuarto con sus cosas
Local vs global
Una variable creada DENTRO de una función es LOCAL: existe solo mientras la función corre, y no se ve
afuera. Si dentro asignas a un nombre que también existe afuera (mensaje), creas una variable local NUEVA
que NO toca la global —por eso "fuera" sigue mostrando la global—. Una función SÍ puede LEER variables
globales (como tasa), pero no las cambia por accidente. Este aislamiento hace que las funciones sean
predecibles: lo que pasa dentro, se queda dentro.
Docstrings y anotaciones de tipo
Si defines mensaje = 'global' fuera, y dentro de una función haces mensaje = 'local', ¿qué vale mensaje fuera después de llamar la función?
Mini-reto
Documenta y aísla: 1) escribe promedio(valores: list) -> float que devuelva el promedio de una lista de
números, con un docstring que explique qué hace, sus parámetros y su retorno; 2) anota los tipos de una
función con_descuento(valor: float, pct: float) -> float; 3) comprueba con un ejemplo que una variable
creada dentro de una función NO existe fuera (intenta imprimirla y observa el error, luego coméntalo).
Imprime el __doc__ de tu función promedio.
Qué sigue
Ya escribes funciones claras y bien documentadas. La última lección del módulo abre el mundo más allá de tu
archivo: los MÓDULOS e IMPORTS —cómo usar código de la biblioteca estándar de Python (math, random,
datetime) y de librerías externas con pip—. Ahí Python revela su verdadero poder: no reinventas la
rueda, la importas.