⊗pyPmFnCl 23 of 129 menu

Cierres en Python

Por cierre (closure) se entiende una función junto con todas las variables externas a las que tiene acceso.

En Python, la mayoría de las veces, al decir "cierre de una función", no se refieren a la función misma, sino precisamente a sus variables externas.

Supongamos que tenemos la siguiente función outer, en la cual se declara la variable i y una función interna inner. En ella, a i se le sumará uno. Para que la variable i funcione correctamente, agregamos la instrucción nonlocal:

def outer(): i = 0 def inner(): nonlocal i i += 1 print(i) return inner

Ahora pongamos la función externa en la variable res y llamémosla con paréntesis:

res = outer() res() # mostrará 1

Llamemos res varias veces. Después de ejecutar el código, cada vez el contador i se incrementará en uno:

res() # mostrará 2 res() # mostrará 3 res() # mostrará 4

Sin embargo, aquí hay un matiz importante: cada llamada a la función outer incrementará su propio contador. Pongamos la primera llamada a outer en la variable res1, y la segunda llamada - en la variable res2. Luego mostrémoslas en la consola secuencialmente:

res1 = outer() res1() # mostrará 1 res1() # mostrará 2 res1() # mostrará 3 res2 = outer() res2() # mostrará 1 res2() # mostrará 2 res2() # mostrará 3

Se da el siguiente código:

def outer(): i = 10 def inner(): nonlocal i i -= 2 print(i) return inner res1 = outer() res1() res1() res2 = outer() res2() res2() res2()

Diga qué se mostrará en la consola.

Cree una función, cada llamada de la cual genere el siguiente número de Fibonacci.

Cree una función que genere un número entero aleatorio en un intervalo, pero de tal manera que no haya dos números iguales consecutivos.

Español
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Usamos cookies para el funcionamiento del sitio, análisis y personalización. El procesamiento de datos se realiza de acuerdo con la Política de privacidad.
aceptar todas configurar rechazar