デコレータについては以前に学んだことがありますが、まだ表面をなぞっただけで、どのように呼び出すか混乱しています。現在のプロジェクトを最適化したいだけなので、デコレータを使用しようと思い、徹底的に勉強しました。
まず見てみましょう コード:
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函数....
私の疑問は、論理的に言えば、返されるのは明らかに関数のアドレスであるということです。私の理解に何か間違いがありますか?そこでネットで情報を調べたら、また閉鎖になってしまった…。 そこで、自分で分析してプログラムをまとめてみました。
プログラム:
# 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()()) # 调用无参数的嵌套函数...
これは私たちのデコレータに似ていませんか?これが私たちのデコレーターです!したがって、上記のプログラムに従って理解することができます。つまり、最初にパラメーターの数を決定し、それからそれらを個別に渡します。次に、コードを書き直してみましょう。
以上がPythonデコレータの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。