Meta tags:
description= Aprende cómo funcionan los closures en Python: funciones anidadas, variables capturadas, nonlocal, errores comunes y casos de uso reales con ejemplos…;
Headings (most frequently used words):
closures, un, closure, en, de, solución, por, python, qué, es, tres, condiciones, para, modificar, variables, capturadas, con, nonlocal, error, común, bucles, casos, uso, prácticos, vs, clases, conclusión, práctica, inspeccionar, argumento, defecto, captura, valor, función, fábrica, aplicación, parcial, memoización, simple, configuración, callbacks,
Text of the page (most frequently used words):
#python (67), una (37), función (29), #closure (22), def (21), print (21), return (20), que (20), los (18), variable (18), con (16), aprender (15), closures (15), matplotlib (14), copiar (13), count (13), mysql (13), mongodb (12), variables (11), elementos (11), para (9), error (9), ámbito (9), del (9), nonlocal (8), __closure__ (8), counter (8), funcs (8), listas (8), html (7), outer (7), las (7), por (7), más (7), métodos (7), for (7), tuplas (7), the (6), inner (6), from (6), cada (6), anidada (6), step (6), start (6), args (6), crear (6), eliminar (6), datos (6), w3docs (5), práctica (5), tres (5), not (5), son (5), base (5), valor (5), estado (5), clase (5), increment (5), make_counter (5), self (5), message (5), cache (5), exterior (5), archivos (5), string (5), strings (5), primeros (5), pasos (5), tutorial (5), lista (5), formatter (5), color (5), json (4), generator (4), clases (4), casos (4), uso (4), bucles (4), condiciones (4), function (4), enclosing (4), scope (4), bucle (4), fábrica (4), cuando (4), definida (4), otra (4), info (4), cómo (4), slow_square (4), crea (4), cell (4), local (4), add5 (4), double (4), factor (4), make_multiplier (4), regresión (4), diccionarios (4), acceder (4), code (3), encoder (3), editor (3), herramientas (3), cuestionarios (3), ejercicios (3), php (3), javascript (3), css (3), ejemplos (3), prácticos (3), modificar (3), capturadas (3), qué (3), rebind (3), decoradores (3), usa (3), defecto (3), leer (3), capturada (3), interna (3), make_logger (3), callbacks (3), funcionan (3), make_power (3), celda (3), range (3), lambda (3), dentro (3), counter2 (3), desaparece (3), greet (3), retorna (3), referencia (3), triple (3), cadenas (3), recorrer (3), unir (3), ver (3), tools (3), italiano (2), português (2), español (2), français (2), русский (2), deutsch (2), english (2), beautifier (2), diff (2), password (2), try (2), java (2), git (2), libros (2), fragmentos (2), conclusión (2), común (2), this (2), page (2), recursión (2), generadores (2), comprobar (2), empty (2), none (2), what (2), does (2), attribute (2), when (2), free (2), which (2), keyword (2), allows (2), its (2), argumento (2), iteración (2), libre (2), otro (2), lugar (2), permiten (2), privado (2), fue (2), clave (2), comportamiento (2), approach (2), class (2), múltiples (2), disk (2), full (2), server (2), started (2), log (2), prefix (2), construir (2), contexto (2), este (2), make_memoized (2), wrapper (2), func (2), diccionario (2), simple (2), cube (2), square (2), power (2), exponent (2), nueva (2), nuevo (2), make_func (2), solución (2), append (2), comparten (2), capture (2), uno (2), consulta (2), llamada (2), independiente (2), pero (2), normalmente (2), tupla (2), objetos (2), make_adder (2), add (2), celdas (2), hello (2), esa (2), hace (2), multiply (2), errores (2), comunes (2), funciones (2), and (2), handling (2), números (2), limit (2), colección (2), delete (2), ordenar (2), cuadrícula (2), dispersión (2), distribución (2), introducción (2), conjuntos (2), set (2), sets (2), cambiar (2), agregar (2), hash (2), 2026, todos, derechos, reservados, hecho, desarrolladores, idioma, política, privacidad, contacto, acerca, empresa, tutoriales, gratuitos, web, desde, 2014, next, previous, yes, was, helpful, false, list, tuple, global, están, estrechamente, relacionados, reglas, evita, tomar, instantánea, necesites, solo, reasignar, requiere, sea, retornada, pasada, tenga, propio, recordar, donde, puntos, ambos, producen, idéntico, corto, descubrible, extensible, __init__, pasar, callback, necesita, ser, serializado, pickle, atributos, públicos, dato, preferir, situación, único, método, suelen, resolver, mismo, problema, elige, según, complejidad, muy, útiles, necesitan, algo, incorporado, configuración, patrón, exactamente, internamente, decorador, envuelve, served, puede, almacenar, caché, persiste, entre, llamadas, memoización, alternativa, ligera, necesitas, versión, preconfigurada, functools, partial, aplicación, parcial, tanto, enfoque, explícito, legible, default, arg, evaluated, immediately, captura, lambdas, sola, contiene, momento, llaman, alcanzado, final, wrong, all, functions, same, clásico, esperando, actual, profundizar, decide, pertenece, produce, unaffected, new, puedes, intentar, asignarle, cual, desea, palabra, indicarle, refieres, reasignarla, vale, cell_contents, expone, través, atributo, inspeccionar, tras, retornar, marco, sobrevive, returns, references, pasa, denomina, existe, cumplen, siguientes, propia, copia, completamente, independientes, aunque, hayan, sido, creados, misma, captured, construye, ejecuta, vez, cualquier, allí, excepción, mantiene, viva, especial, lleva, esas, dondequiera, vaya, objeto, esta, página, explica, requieren, incluso, después, haya, retornado, adjuntar, sin, usar, convierte, elegantes, fábricas, helpers, recuerda, aprende, anidadas, reales, ejecutables, peticiones, http, pytest, paquetes, entornos, virtuales, tooling, best, practices, threading, asyncio, concurrency, csv, random, sys, itertools, collections, lanzar, excepciones, standard, library, sumar, dos, invertir, duplicados, how, enumeraciones, abstractas, encapsulamiento, polimorfismo, dataclasses, static, classmethod, property, mágicos, advanced, oop, sentencia, match, enumerate, zip, map, comprensiones, gestores, kwargs, sugerencias, tipo, intermediate, actualización, find, insertar, join, update, drop, table, order, where, select, insert, tabla, vecinos, cercanos, curva, auc, roc, validación, cruzada, agregación, bootstrap, means, categóricos, búsqueda, logística, agrupamiento, jerárquico, matriz, confusión, árbol, decisión, train, test, escalar, múltiple, polinomial, lineal, diagrama, normal, percentil, desviación, estándar, media, mediana, moda, machine, learning, gráficos, pastel, histogramas, barras, subplot, etiquetas, líneas, marcadores, trazado, pyplot, django, scipy, pandas, numpy, modules, escribir, manejo, file, formateo, entrada, usuario, except, pip, regex, matemáticas, fechas, módulos, iteradores, herencia, arrays, while, else, operadores, booleanos, casting, tipos, comentarios, sintaxis, nombres, actualizar, desempaquetar, segmentación, home, salida, anidados, iterar, sobre, comprensión, globales, formato, caracteres, escape, concatenar, asignar, valores, conjunto, añadir, iniciar, sesión, buscar, formatters, url, reverse, sha256, md5, length, calculator, colors, hsl, hex, mixer, converter, picker, general, cursos, explicados,
Text of the page (random words):
closures en python explicados con ejemplos w3docs w3docs libros aprender html aprender css aprender javascript aprender git aprender java aprender php aprender python cursos cuestionarios ejercicios fragmentos herramientas general tools html editor password generator html encoder code diff json beautifier ver los 13 color tools color picker color converter color mixer color hex colors hsl ver los 10 string tools string length calculator md5 hash generator sha256 hash generator string reverse url encoder ver los 19 code formatters javascript formatter css formatter html formatter json formatter php formatter buscar en w3docs k es english en deutsch de русский ru français fr español es português pt italiano it iniciar sesión aprender python python tutorial acceder a elementos acceder a elementos de lista acceder a elementos de un set acceder a tuplas agregar elementos añadir elementos a una lista agregar elementos a un conjunto asignar múltiples valores cambiar elementos cambiar elementos de una lista concatenar strings copiar diccionarios copiar listas métodos de diccionario caracteres de escape cadenas de formato variables globales unir listas unir sets unir tuplas comprensión de listas métodos de lista iterar sobre diccionarios recorrer listas recorrer sets recorrer tuplas modificar strings diccionarios anidados variables de salida python home listas de python conjuntos en python python strings tuplas en python variables en python eliminar elementos eliminar elementos de una lista eliminar elementos de un set métodos de conjuntos segmentación de cadenas ordenar listas métodos de string métodos de tupla desempaquetar tuplas actualizar tuplas nombres de variables introducción a python primeros pasos con python sintaxis de python comentarios en python variables en python tipos de datos en python números en python casting en python strings de python booleanos en python operadores de python listas de python tuplas de python diccionarios en python python if else bucles while en python bucles for en python funciones en python python lambda arrays en python clases y objetos en python herencia en python iteradores de python ámbito en python módulos de python fechas en python matemáticas en python python json python regex python pip python try except entrada de usuario en python formateo de cadenas en python file handling manejo de archivos en python leer archivos en python escribir crear archivos en python eliminar archivos en python python modules tutorial de numpy tutorial de pandas tutorial de scipy tutorial de django python matplotlib introducción a matplotlib primeros pasos con matplotlib matplotlib pyplot trazado con matplotlib marcadores de matplotlib líneas en matplotlib etiquetas en matplotlib cuadrícula de matplotlib subplot de matplotlib dispersión en matplotlib barras en matplotlib histogramas con matplotlib gráficos de pastel con matplotlib machine learning primeros pasos media mediana moda desviación estándar percentil distribución de datos distribución normal de datos diagrama de dispersión regresión lineal regresión polinomial regresión múltiple escalar train test árbol de decisión matriz de confusión agrupamiento jerárquico regresión logística búsqueda en cuadrícula datos categóricos k means agregación bootstrap validación cruzada curva auc roc k vecinos más cercanos python mysql primeros pasos con mysql mysql crear base de datos mysql crear tabla mysql insert mysql select mysql where mysql order by mysql delete mysql drop table mysql update mysql limit mysql join python mongodb primeros pasos con mongodb crear base de datos mongodb mongodb crear colección insertar en mongodb mongodb find consulta mongodb ordenar en mongodb mongodb delete eliminar colección en mongodb actualización en mongodb mongodb limit intermediate python f strings sugerencias de tipo args kwargs decoradores generadores closures recursión gestores de contexto comprensiones enumerate zip map sentencia match advanced oop métodos mágicos property static y classmethod dataclasses polimorfismo encapsulamiento clases abstractas enumeraciones python how to eliminar duplicados en listas invertir un string sumar dos números error handling and the standard library lanzar excepciones collections itertools os sys random archivos csv concurrency in python asyncio threading python tooling and best practices entornos virtuales paquetes pytest peticiones http closures en python aprende cómo funcionan los closures en python funciones anidadas variables capturadas nonlocal errores comunes y casos de uso reales con ejemplos ejecutables un closure es una función anidada que recuerda las variables del ámbito en el que fue definida incluso después de que la función exterior haya retornado los closures permiten adjuntar estado privado a una función sin usar una clase lo que los convierte en una de las herramientas más elegantes de python para construir callbacks fábricas y helpers con estado esta página explica cómo funcionan los closures las tres condiciones que requieren los errores comunes y los casos de uso prácticos qué es un closure cuando python ejecuta una función crea un ámbito local que desaparece una vez que la función retorna normalmente cualquier variable definida allí desaparece un closure es la excepción si una función interna hace referencia a una variable de una función exterior python mantiene esa variable viva en un objeto cell especial y la función interna lleva una referencia a esas celdas dondequiera que vaya el closure más simple es una función fábrica una función que construye y retorna otra función def make_multiplier factor def multiply n return n factor factor is captured from the enclosing scope return multiply double make_multiplier 2 triple make_multiplier 3 print double 5 10 print triple 5 15 print double 10 20 copiar cada llamada a make_multiplier crea un closure nuevo con su propia copia independiente de factor double y triple son completamente independientes aunque hayan sido creados por la misma función tres condiciones para un closure una función es un closure cuando se cumplen las tres condiciones siguientes existe una función anidada una función definida dentro de otra función la función anidada hace referencia a una variable del ámbito exterior esa variable se denomina variable libre la función exterior retorna la función anidada o la pasa a otro lugar def outer message hello from outer free variable def inner print message inner references it return inner outer returns inner greet outer greet hello from outer copiar tras retornar outer su marco local desaparece pero message sobrevive dentro de greet __closure__ inspeccionar un closure python expone las celdas del closure a través del atributo __closure__ def make_adder n def add x return x n return add add5 make_adder 5 print add5 3 8 print add5 __closure__ cell at 0x print add5 __closure__ 0 cell_contents 5 copiar __closure__ es una tupla de objetos cell uno por cada variable capturada si una función no es un closure __closure__ vale none modificar variables capturadas con nonlocal por defecto puedes leer una variable capturada pero no reasignarla intentar asignarle un valor crea una nueva variable local lo cual normalmente no es lo que se desea usa la palabra clave nonlocal para indicarle a python que te refieres a la variable del ámbito exterior def make_counter start 0 count start def increment step 1 nonlocal count rebind the enclosing count not a new local count step return count return increment counter make_counter print counter 1 print counter 2 print counter 5 7 counter2 make_counter 10 print counter2 11 print counter 8 counter is unaffected copiar cada llamada a make_counter produce una celda count independiente counter y counter2 no comparten estado para profundizar en cómo python decide a qué ámbito pertenece una variable consulta python scope error común closures en bucles un error clásico es crear closures dentro de un bucle esperando que cada uno capture el valor actual de la variable del bucle wrong all functions capture the same i cell funcs for i in range 3 funcs append lambda i print f for f in funcs 2 2 2 not 0 1 2 copiar los tres lambdas comparten una sola celda que contiene la variable del bucle i en el momento en que se llaman i ha alcanzado su valor final de 2 solución 1 argumento por defecto captura por valor funcs for i in range 3 funcs append lambda i i i default arg is evaluated immediately print f for f in funcs 0 1 2 copiar solución 2 función fábrica def make_func i def f return i return f funcs make_func i for i in range 3 print f for f in funcs 0 1 2 copiar la función fábrica crea un ámbito nuevo y por tanto una celda nueva en cada iteración este enfoque es más explícito y legible casos de uso prácticos aplicación parcial los closures son una alternativa ligera a functools partial cuando necesitas una versión preconfigurada de una función def make_power exponent def power base return base exponent return power square make_power 2 cube make_power 3 print square 4 16 print cube 3 27 copiar memoización simple un closure puede almacenar un diccionario de caché que persiste entre llamadas def make_memoized func cache def wrapper args if args not in cache cache args func args return cache args return wrapper make_memoized def slow_square n return n n print slow_square 4 16 print slow_square 4 16 served from cache print slow_square 7 49 copiar este patrón es exactamente cómo funcionan los decoradores de python internamente un decorador no es más que un closure que envuelve otra función configuración de callbacks los closures son muy útiles para construir callbacks que necesitan algo de contexto incorporado def make_logger prefix def log message print f prefix message return log info make_logger info error make_logger error info server started info server started error disk full error disk full copiar closures vs clases un closure y una clase con un único método suelen resolver el mismo problema elige según la complejidad situación preferir un dato de estado un comportamiento closure múltiples métodos o atributos públicos clase necesita ser serializado p ej pickle clase pasar un callback a otra función closure class approach class counter def __init__ self start 0 self count start def increment self step 1 self count step return self count closure approach def make_counter start 0 count start def increment step 1 nonlocal count count step return count return increment copiar ambos producen un comportamiento idéntico el closure es más corto la clase es más descubrible y extensible conclusión los closures permiten que una función anidada tenga su propio estado privado al recordar las variables del ámbito donde fue definida los puntos clave son un closure requiere una función anidada una variable libre y que la función interna sea retornada o pasada a otro lugar usa nonlocal cuando necesites reasignar no solo leer una variable capturada evita el error con variables de bucle usa una función fábrica o un argumento por defecto para tomar una instantánea del valor en cada iteración los closures son la base de los decoradores y están estrechamente relacionados con las reglas de ámbito de python práctica práctica which keyword allows an inner function to rebind a variable from its enclosing scope which keyword allows an inner function to rebind a variable from its enclosing scope global nonlocal free outer comprobar práctica what does the __closure__ attribute return when a function is not a closure what does the __closure__ attribute return when a function is not a closure an empty tuple none an empty list false comprobar was this page helpful yes no previous generadores next recursión on this page qué es un closure tres condiciones para un closure modificar variables capturadas con nonlocal error común closures en bucles casos de uso prácticos closures vs clases conclusión práctica w3docs tutoriales ejemplos ejercicios fragmentos y cuestionarios gratuitos para la web desde 2014 libros aprender html aprender css aprender javascript aprender git aprender java aprender php aprender python práctica ejercicios cuestionarios editor try it herramientas html editor password generator html encoder code diff json beautifier empresa acerca de contacto política de privacidad idioma english deutsch русский français español português italiano 2026 w3docs todos los derechos reservados hecho para desarrolladores
|