この記事では、Python デコレーターとは何なのかについて説明します。使い方?一定の参考値があるので、困っている友人は参考にしていただければ幸いです。
Pythonを学習していく中で、デコレータという漠然とした概念は誰しもが持っていると思いますが、私もずっと混乱していたので、それを整理するために記事を書くことにしました。
まず第一に、デコレータとは何かを理解する必要があります。
簡単に言えば、デコレータは、関数をラップする関数として理解でき、関数が必要なときに関数を追加します。関数が実行中です。この関数の元の内容には影響せず、関数の実行後にクリーンアップ作業を実行することもできます。
簡単な例を示します
@func1 def func2(): pass
デコレータの動作はfunc1(func2)
関数オブジェクトをデコレータに渡し、デコレータを実行しますfunc1
その中のコンテンツを取得し、関数 func2
を実行します。
たとえば、一般的なデコレータの例を見てみましょう
#普通装饰器 def func1(func): def add_func(): print('这是我要添加的功能') return func() return add_func @func1 def func2(): print('hello world') #func1装饰器函数 #func2被装饰的函数 >>>func2() 这是我要添加的功能 hello world
このコードでは、 func2() は func1(func2)()->add_func() と同等です。 func2() 関数を実行するには、デコレータ func1() 関数が最初に実行され、パラメータ func は func2() と同等です。 func1 関数を実行すると、戻り値が add_func なので、func1(func2)() を実行します。これは、add_func() を実行するのと同じで、
「これは私が追加した関数です」を出力し、func() を返します。 function. つまり、パラメータ func の呼び出し、つまり、対応する func2 関数の呼び出しです。
デコレータの基本フレームワーク
def func1(func): def func2(): return func() return func1()
上級
パラメータを使用してデコレータを作成しましょう
def func1(func): def func2(a,b): a=1 b=2 return func(a,b) return func() @func1 def func(x,y) print('this is a add func') print(x+y) >>>func(10,20) this is a add func 3
このコードの装飾された関数のパラメーターは、装飾された関数の変数に渡されます。つまり、x
は a
に渡され、y
は # # に渡されます。 #b,
return func(a,b) は、
func 関数が呼び出され、関数のパラメーターが
a と
b## であることを意味します。 #。 パラメータを備えたより高度なデコレータ関数 (笑、少し混乱していますか?)
def arg_func(arg): def _func(func): def _func1(): if arg=='good': print('出去玩') if arg=='bad': print('不出去玩') return func() return _func1 return _func @arg_func('bad') def func(): print('bad day') @arg_func('good') def func1() print('good day') >>>func() 不出去玩 bad day >>>func1() 出去玩 good day
このコードは実際には非常に単純です。つまり、デコレータには判定用のパラメータがもう 1 つあります。分かりやすそうです。同様に、func デコレータを実行すると、関数 (arg_func) のパラメータが不正になり、func1 関数を実行すると、デコレータ関数のパラメータが良好になります。
以上がPython デコレータとは何ですか?使い方?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。