Articles of cierres de

¿Cierre en python?

Cuando ejecuto este código, obtengo este resultado: 15 15 Espero que la salida sea 15 17 pero no lo es. La pregunta es: ¿por qué? def make_adder_and_setter(x): def setter(n): x = n return (lambda y: x + y, setter) myadder, mysetter = make_adder_and_setter(5) print myadder(10) mysetter(7) print myadder(10)

Contador de python con cierre.

Estoy tratando de construir un contador en python con la propiedad de cierre. El código en los siguientes trabajos: def generate_counter(): CNT = [0] def add_one(): CNT[0] = CNT[0] + 1 return CNT[0] return add_one Sin embargo, cuando cambio la lista CNT a una var, no funcionó: def generate_counter1(): x = 0 def add_one(): x […]

El ejecutivo no recoge las variables del cierre.

Tengo un poco de curiosidad por qué el siguiente código genera un NameError . >>> s = “”” … foo = [1,2,3] … def bar(): … return foo[1] … “”” >>> namespace = {} >>> exec(s, {‘__builtins__’: None}, namespace) >>> print namespace {‘foo’: [1, 2, 3], ‘bar’: } >>> namespace[‘bar’]() En el nivel normal de […]

Función dentro de la función – ¿cada vez?

Déjanos tener este código: def big_function(): def little_function(): ……. ……… La documentación de Python dice acerca de la statement de def : Una definición de función es una sentencia ejecutable. Su ejecución enlaza el nombre de la función … Entonces, la pregunta es: ¿se def little_function() cada vez que se invoca big_function ? La pregunta […]

Ejecución de pruebas unitarias en funciones anidadas

Vengo del mundo de Java, donde puedes ocultar variables y funciones y luego ejecutar pruebas de unidad contra ellas usando la reflexión. He usado funciones anidadas para ocultar los detalles de implementación de mis clases para que solo se vea la API pública. Estoy tratando de escribir pruebas unitarias contra estas funciones anidadas para asegurarme […]

error de scope en el cierre recursivo

¿Por qué funciona esto? def function1(): a = 10 def function2(): print a function2() pero esto no lo hace: def function1(): a = 10 def function2(): print a a -= 1 if a>0: function2() function2() Me sale este error: UnboundLocalError: local variable ‘a’ referenced before assignment

¿Por qué este cierre no modifica la variable en el ámbito adjunto?

Este bit de Python no funciona: def make_incrementer(start): def closure(): # I know I could write ‘x = start’ and use x – that’s not my point though (: while True: yield start start += 1 return closure x = make_incrementer(100) iter = x() print iter.next() # Exception: UnboundLocalError: local variable ‘start’ referenced before assignment […]

¿Python serializa cierres léxicos?

¿Hay una manera de serializar un cierre léxico en Python usando la biblioteca estándar? Pickle y Marshal parecen no funcionar con cierres léxicos. Realmente no me importan los detalles de la serialización de cadenas binarias en comparación con, etc., solo tiene que funcionar. Por ejemplo: def foo(bar, baz) : def closure(waldo) : return baz * […]

¿Cómo se implementan los cierres?

“Aprendiendo Python, 4ª ed.” menciona que: la variable de ámbito adjunto se busca cuando las funciones anidadas se llaman más tarde. Sin embargo, pensé que cuando una función sale, todas sus referencias locales desaparecen. def makeActions(): acts = [] for i in range(5): # Tries to remember each i acts.append(lambda x: i ** x) # […]

En Python 2, ¿cómo escribo en la variable en el ámbito principal?

Tengo el siguiente código dentro de una función: stored_blocks = {} def replace_blocks(m): block = m.group(0) block_hash = sha1(block) stored_blocks[block_hash] = block return ‘{{{%s}}}’ % block_hash num_converted = 0 def convert_variables(m): name = m.group(1) num_converted += 1 return ” % name fixed = MATCH_DECLARE_NEW.sub(”, template) fixed = MATCH_PYTHON_BLOCK.sub(replace_blocks, fixed) fixed = MATCH_FORMAT.sub(convert_variables, fixed) Agregar elementos […]