
Duda sobre decoradores
Publicado por Samuel (2 intervenciones) el 05/01/2015 21:03:26
Lo primero, Feliz año nuevo!!

Llevo meses con una duda que no termino de responder y seguramente sea un error de concepto. No termino de verlo así que ya me he planteado el preguntarlo.
Estoy siguiendo el libro de Python3 al descubierto y me plantea este ejemplo:
Según lo que tengo yo entendido al llamar a ejecutar fun se evalúa el decorador decorator_args que en este caso tiene unos parámetros que recibe y son 1, 2, 3 que corresponden a arg1, arg2, arg3.
Al ejecutar decorator_args se define wrap y se devuelve wrap.
Ahora es cuando me pierdo.
No entiendo cuando el contenido de wrap se ejecuta y se devuelve wrapped_f . Según me lo imagino yo wrap(f) ahora mismo estaría recibiendo los parámetros de fun y eso no tendría sentido.
Dado que es un error de concepto en el que me pierdo por alguna razón y no termino de verlo.
Dado que el resto de los decoradores y closures que he visto hasta ahora creo entenderlos.
Os pido de corazón una pequeña ayudita para poder entenderlo.

Llevo meses con una duda que no termino de responder y seguramente sea un error de concepto. No termino de verlo así que ya me he planteado el preguntarlo.
Estoy siguiendo el libro de Python3 al descubierto y me plantea este ejemplo:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
def decorator_args(arg1, arg2, arg3):
def wrap(f):
print ("Ini wrap()")
def wrapped_f(*args):
print ("Ini wrapped_f")
print ("Decorator args:", arg1, arg2, arg3)
f(*args)
print ("Fin wrapped_f")
return wrapped_f
return wrap
@decorator_args(1, 2, 3)
def fun(a,b):
print ("Fun args: ", a, b)
fun ("p1", "p2")
Según lo que tengo yo entendido al llamar a ejecutar fun se evalúa el decorador decorator_args que en este caso tiene unos parámetros que recibe y son 1, 2, 3 que corresponden a arg1, arg2, arg3.
Al ejecutar decorator_args se define wrap y se devuelve wrap.
Ahora es cuando me pierdo.
No entiendo cuando el contenido de wrap se ejecuta y se devuelve wrapped_f . Según me lo imagino yo wrap(f) ahora mismo estaría recibiendo los parámetros de fun y eso no tendría sentido.
Dado que es un error de concepto en el que me pierdo por alguna razón y no termino de verlo.
Dado que el resto de los decoradores y closures que he visto hasta ahora creo entenderlos.
Os pido de corazón una pequeña ayudita para poder entenderlo.
Valora esta pregunta


0