Nur eine Funktion
def hoge():
print "aaaaaaabb"
hoge()
aaaaaaabb
Daran ist nichts Seltsames.
Eigentlich ist Python @ (Funktionsname) Sie können eine verschachtelte Struktur erstellen, indem Sie die Beschreibung vor der Funktionsdefinition hinzufügen. Also, wenn du ein bisschen damit spielst
def deco(func):
def aaa():
print "wei soiya"
func()
return aaa
@deco
def hoge():
print "aaaaaaabb"
hoge()
wei soiya
aaaaaaabb
Ein Satz wird vorher hinzugefügt
Im obigen Beispiel
@deco
def hoge
Durch
hoge()
Aber
deco(hoge)()
Ist äquivalent zu.
Es scheint, dass Sie mehrere Dekorateure kombinieren oder Argumente separat an die Dekorateure übergeben können, indem Sie in den Wrapper beißen.
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
Ich habe auf die folgende Seite verwiesen.
http://hangar.runway7.net/python/decorators-and-wrappers
Recommended Posts