Articles of cierres 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 […]

Cierre de Python, error de scope de variable local

Mi función me lanza con la local variable ‘pt’ referenced before assignment error de local variable ‘pt’ referenced before assignment : Traceback (most recent call last): File “/home/solesschong/Workspace/PenPal/python/main.py”, line 126, in callback ind = (i+pt) % n UnboundLocalError: local variable ‘pt’ referenced before assignment El código es el siguiente def get_audio_callback(pt): def callback(in_data, frame_count, time_info, […]

Necesita ayuda para entender los cierres de Python

Tengo este codigo import re def doReplace(toReplace): i = 1 def chapterReplacer(_): result = ‘Chapter %i’ % i i += 1 return result return re.sub(‘Chapter [a-zA-Z]+’, chapterReplacer, test) test = ‘Chapter one Chapter Two Chapter three’ print doReplace(test) cuando lo ejecuto, me sale el siguiente error: Traceback (most recent call last): File “C:/Python26/replace.py”, line 13, […]

¿Por qué no puede Python incrementar la variable en el cierre?

En este fragmento de código puedo imprimir el valor del contador desde dentro de la función de barra def foo(): counter = 1 def bar(): print(“bar”, counter) return bar bar = foo() bar() Pero cuando bash incrementar el contador desde dentro de la función de barra, aparece un error UnboundLocalError. UnboundLocalError: local variable ‘counter’ referenced […]