Pythonデコレータ

大家讲道理
大家讲道理オリジナル
2017-08-19 14:47:352231ブラウズ

デコレータについては以前に学んだことがありますが、まだ表面をなぞっただけで、どのように呼び出すか混乱しています。現在のプロジェクトを最適化したいだけなので、デコレータを使用しようと思い、徹底的に勉強しました。

まず見てみましょう コード:


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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。