ホームページ  >  記事  >  バックエンド開発  >  Pythonデコレータの徹底解説

Pythonデコレータの徹底解説

黄舟
黄舟オリジナル
2017-10-01 07:44:051470ブラウズ

この記事は主に、Python デコレータの関連情報を簡単かつ詳細に学習するためのものです。興味のある友人は参考にしてください。サーフェスに慣れていないので、その呼び出し方法に混乱していました。現在のプロジェクトを最適化したいと考えたので、デコレーターについて詳しく調べてみましょう。まずはコードです:

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


@timeif
def 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 funY1


if __name__ == '__main__':
  # print(funX(5)()) # 调用有参数的嵌套函数...
  
  print(funX1()()) # 调用无参数的嵌套函数...

これと私たちのデコレーターは似ていませんか?これが私たちのデコレーターです!したがって、上記のプログラムに従って理解することができます。つまり、最初にパラメーターの数を決定し、それからそれらを個別に渡します。次に、コードを書き直してみましょう。

以上がPythonデコレータの徹底解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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