Juste une fonction
def hoge():
print "aaaaaaabb"
hoge()
aaaaaaabb
Il n'y a rien d'étrange à cela.
En fait, Python est @ (nom de la fonction) Vous pouvez créer une structure imbriquée en ajoutant la description avant la définition de la fonction. Donc si tu joues un peu avec
def deco(func):
def aaa():
print "wei soiya"
func()
return aaa
@deco
def hoge():
print "aaaaaaabb"
hoge()
wei soiya
aaaaaaabb
Une phrase sera ajoutée avant
Dans l'exemple ci-dessus
@deco
def hoge
Par
hoge()
Mais
deco(hoge)()
Est équivalent à.
Il semble que vous puissiez combiner plusieurs décorateurs ou passer des arguments aux décorateurs séparément en mordant le wrapper.
def deco1(name):
def wrapper(func):
def aaaa():
print "your name is "+name
print "deco1 called!"
return func("aaa","www",yakiniku="teishoku")
return aaaa
return wrapper
def deco2(func):
def bbbb(*args, **kwargs):
print "wrap2 called!"
return func(*args, **kwargs)
return bbbb
@deco1('nanntara-kanntara-')
@deco2
def eee(*args, **kwargs):
print args
print kwargs
return "done"
print eee()
your name is nanntara-kanntara-
deco1 called!
wrap2 called!
('aaa', 'www')
{'yakiniku': 'teishoku'}
done
Je me suis référé au site suivant.
http://hangar.runway7.net/python/decorators-and-wrappers
Recommended Posts