Articles of cierres de

¿Las funciones de Python 2.7 recuerdan el valor y no la referencia? Cierre rareza

Estoy tratando de devolver desde una función una lista de funciones, cada una de las cuales utiliza variables del ámbito externo. Esto no está funcionando. Aquí hay un ejemplo que demuestra lo que está sucediendo: a = [] for i in range(10): a.append(lambda x: x+i) a[1](1) # returns 10, where it seems it should return […]

Función de cierre de Python perdiendo acceso variable exterior

Acabo de aprender python @ decorator, es genial, pero pronto descubrí que mi código modificado tenía problemas extraños. def with_wrapper(param1): def dummy_wrapper(fn): print param1 param1 = ‘new’ fn(param1) return dummy_wrapper def dummy(): @with_wrapper(‘param1’) def implementation(param2): print param2 dummy() Lo depuro, arroja una excepción en el parámetro de impresión. UnboundLocalError: local variable ‘param1’ referenced before assignment […]

Decorador y cerramientos.

Estoy pasando por ¿Cómo hacer una cadena de decoradores funcionales? para entender decorador. En el siguiente ejemplo, vemos que “method_to_decorate” es accesible a la función de contenedor debido a los cierres. Pero, no entendí cómo los argumentos self y lie son accesibles a la función wrapper. def method_friendly_decorator(method_to_decorate): def wrapper(self, lie): lie = lie – […]

Pitón, confundido en decoración y cierre.

Tengo un código de prueba: def num (num): def deco (func): def wrap (* args, ** kwargs): inputed_num = num Función de retorno (* args, ** kwargs) envolver vuelta volver deco @num (5) prueba de def (a): devuelve a + inputed_num prueba de impresión (1) cuando ejecuto este código, recibí un error que muestra que […]

¿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