Ich habe schon früher etwas über Dekoratoren gelernt, aber ich habe nur an der Oberfläche gekratzt und war verwirrt, wie ich sie nennen sollte. Ich wollte nur mein aktuelles Projekt optimieren, also dachte ich darüber nach, Dekoratoren zu verwenden, also habe ich sie eingehend studiert.
Werfen wir zunächst einen Blick auf den Code:
import time# 将函数作为参数传入到此方法....def timeif(func): def wrapper(arg): print("in wrapper() %s" % (arg)) start = time.clock() func(arg) end = time.clock() print("used: %s %s" % (end-start, arg)) return wrapper @timeifdef foo(arg): print("in foo() %s" % (arg))if __name__ == '__main__': foo(" Hello ") # 表示执行foo函数....
Meine Zweifel sind, dass die Rückgabe offensichtlich eine ist Funktionsname, was Sinn macht. Mit anderen Worten, was zurückgegeben wird, ist eine Funktionsadresse! Stimmt etwas mit meinem Verständnis nicht? Dann habe ich die Informationen im Internet überprüft und es war wieder geschlossen.... Aber ich persönlich habe es selbst analysiert und ein Programm zusammengefasst Programm:
# coding=utf-8# 带参数的函数 返回一个函数地址就行....def funX(x): def funY(): return x return funY# 不带参数的函数....def funX1(): print("调用函数funX1") def funY1(): print("调用函数funY1") return funY1if __name__ == '__main__': # print(funX(5)()) # 调用有参数的嵌套函数... print(funX1()()) # 调用无参数的嵌套函数...
# coding=utf-8import time# 将函数作为参数传入到此方法....def timeif(func): def wrapper(arg): print("in wrapper() %s" % (arg)) start = time.clock() func(arg) end = time.clock() print("used: %s %s" % (end-start, arg)) return wrapper# @timeifdef foo(arg): print("in foo() %s" % (arg))if __name__ == '__main__': timeif(foo)(' Hello')
Das obige ist der detaillierte Inhalt vonPython-Dekorateur. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!