Articles of cierres

¿Cómo se refiere una función lambda a sus parámetros en python?

Soy nuevo en Python. Mi tarea fue bastante simple: necesito una lista de funciones que puedo usar para hacer cosas en lotes. Así que jugué con algunos ejemplos como fs = [lambda x: x + i for i in xrange(10)] Sorprendentemente, la llamada de [f(0) for f in fs] Me dio el resultado como [9, […]

Encontrar los parámetros de una función en Python

Quiero poder preguntar al método __init__ una clase cuáles son sus parámetros. El enfoque directo es el siguiente: cls.__init__.__func__.__code__.co_varnames[:code.co_argcount] Sin embargo, eso no funcionará si la clase tiene decoradores. Le dará la lista de parámetros para la función devuelta por el decorador. Quiero llegar al método __init__ original y obtener esos parámetros originales. En el […]

¿Cómo inyectar variable dentro del scope con un decorador?

[Descargo de responsabilidad: puede haber más formas pythonicas de hacer lo que quiero hacer, pero quiero saber cómo funciona el scope de Python aquí] Estoy tratando de encontrar una manera de hacer un decorador que haga algo como inyectar un nombre en el scope de otra función (de modo que el nombre no se filtre […]

Ámbito local, más allá del ámbito del anexo.

¿Por qué la función lambda para obtener la lista de valores i = 4? La función f ha finalizado el trabajo y ha devuelto el control (la variable i no existe). def f(): L = [] for i in range(5): L.append(lambda x: i ** x) return L L = f() L[0] def f1(N): def f2(X): […]

¿Cómo funcionan las funciones anidadas en Python?

def maker(n): def action(x): return x ** n return action f = maker(2) print(f) print(f(3)) print(f(4)) g = maker(3) print(g(3)) print(f(3)) # still remembers 2 ¿Por qué la función anidada recuerda el primer valor 2 a pesar de que maker() ha regresado y salido cuando se llama a action() ?

El cierre de Python no funciona como se esperaba

Cuando ejecuto el siguiente script, ambos lambda ejecutan os.startfile () en el mismo archivo – junk.txt. Yo esperaría que cada lambda usara el valor “f” cuando se creó la lambda. ¿Hay alguna manera de hacer que esto funcione como espero? import os def main(): files = [r’C:\_local\test.txt’, r’C:\_local\junk.txt’] funcs = [] for f in files: […]

Creación dinámica de funciones en Python con nombres personalizados.

Disculpas si esta pregunta ya ha sido planteada y contestada. Lo que debo hacer es un concepto muy simple, pero desafortunadamente no he podido encontrar una respuesta en línea. Necesito crear funciones dinámicas en Python (Python2.7) con nombres personalizados en tiempo de ejecución. El cuerpo de cada función también debe construirse en tiempo de ejecución, […]

¿Qué es una célula en el contexto de un intérprete o comstackdor?

Los objetos de código de Python tienen un atributo co_cellvars . La documentación del intérprete de bytecode de PyPy a menudo usa el término Celda . Entre otros idiomas, Rust proporciona un tipo de datos de celda . Googlear sugiere que se relacionan con los cierres de alguna manera. ¿Qué es una célula , en […]

Código de ejemplo de cierres de Python

Estoy aprendiendo Python usando el libro Dive Into Python 3 . Me gusta, pero no entiendo el ejemplo usado para introducir los cierres en la Sección 6.5. Quiero decir, veo cómo funciona, y creo que es realmente genial. Pero no veo ningún beneficio real: me parece que se puede lograr el mismo resultado simplemente leyendo […]

¿Cómo burlarse de las funciones anidadas?

La biblioteca burlona que uso es … simulacro . Encontré este problema de “funciones anidadas simuladas” cuando intenté escribir un caso de prueba para una función (código heredado). Esta función utiliza una función anidada muy compleja con grandes dependencias en otros módulos. Me pregunto si es posible simular funciones anidadas con mock .