Python - Duda sobre decoradores

 
Vista:
Imágen de perfil de Samuel

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:

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
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder