LEGB, cierres y sombras en Python explicados de forma clara y práctica para desarrolladores y equipos técnicos que diseñan aplicaciones complejas.

En Python las variables no siempre están donde parecen; cada ámbito actúa como una lámpara y su luz alcanza espacios distintos. El primer nivel es el ámbito local. Si se define una variable dentro de una función existe solo durante la ejecución de esa función. Esa variable nace y muere en la habitación donde se encendió la lámpara y no ilumina el exterior.

El segundo nivel son los cierres o ámbitos de cierre. En funciones anidadas una función interior puede ver nombres definidos en la función que la contiene. Si una variable no aparece en el ámbito local la búsqueda continúa hacia los ámbitos envolventes hasta encontrarla. Es útil imaginar puertas abiertas entre habitaciones que permiten ver la luz de una lámpara vecina.

Después está el ámbito global, que agrupa nombres definidos en el nivel superior del módulo o script. Es como la luz del sol que llega a todas las habitaciones del mismo edificio. Y por último existe el ámbito de nombres incorporados de Python, el universo de builtins compuesto por nombres como len o print que siempre están disponibles. El orden de búsqueda es conocido como la regla LEGB: Local, Enclosing, Global, Builtin. Python se detiene en la primera coincidencia.

La complejidad aparece cuando hay asignaciones en ámbitos interiores. Ante una asignación Python asume que la variable pertenece al ámbito actual, lo que puede provocar comportamientos inesperados. Si dentro de una función se asigna a una variable que también existe en un ámbito exterior, sin declarar la intención, Python tratará esa variable como local y devolverá un error si se intenta leer antes de asignarla, conocido como UnboundLocalError. Ese error es la señal de que la variable local todavía no tiene valor y que la intención de usar el nombre en otro ámbito no fue expresada.

Para declarar esa intención se usan las palabras clave global y nonlocal. global indica que la variable pertenece al módulo superior y que la asignación debe afectar a ese nombre global. nonlocal se utiliza dentro de una función anidada para decir que la variable asignada viene de un ámbito envolvente y no del ámbito local actual. Ambas herramientas permiten controlar dónde se crean o modifican las sombras, y por tanto evitar efectos no deseados en variables de mayor jerarquía.

Comprender LEGB y el comportamiento de las asignaciones no solo evita errores, sino que ayuda a diseñar código más limpio y mantenible. En proyectos profesionales, como desarrollo de backends, agentes de automatización o librerías de IA, definir claramente los ámbitos facilita pruebas, depuración y escalabilidad.

En Q2BSTUDIO aplicamos estas buenas prácticas en proyectos de software a medida y en el desarrollo de aplicaciones a medida, garantizando arquitecturas robustas y seguras. Nuestro equipo también diseña soluciones de inteligencia artificial y agentes IA para empresas, integrándolos con servicios cloud y con flujos de datos para inteligencia de negocio y power bi. Si necesita construir una solución personalizada consulte nuestro servicio de desarrollo de aplicaciones a medida o conozca nuestras capacidades en inteligencia artificial.

Además ofrecemos servicios de ciberseguridad y pentesting, servicios cloud aws y azure, servicios inteligencia de negocio y estrategias de ia para empresas, todo orientado a que su software y sus datos estén protegidos y aporten valor. Entender dónde residen las variables en el código es tan importante como definir dónde residen los datos en la arquitectura empresarial.

Si buscas consultoría en software a medida, integración de agentes IA, automatización de procesos o soluciones de business intelligence y power bi, en Q2BSTUDIO unimos experiencia en programación, inteligencia artificial y ciberseguridad para entregar resultados medibles y sostenibles.