0
私はpythonのデコレータを読んでいると非常に便利だが、私はGoogleとstackoverflowで検索しようとしたが、良い答えを見つけることができませんでした混乱している1つの質問はすでに同じタイトルでstackoverflowで聞かれている@wrap、私の質問は異なります。デコレータでラッパーを使用する理由、ラッパーなしでデコレータを作成できるのはなぜですか?
だから何である基本的なデコレータテンプレートは次のとおりです。結果
def deco(x):
def wrapper(xx):
print("before the deco")
x(xx)
print("after the deco")
return wrapper
def new_func(a):
print("this is new function")
wow=deco(new_func)
print(wow(12))
:
before the deco
this is new function
after the deco
None
だからいつでもデコはそれがWRA呼んで返しますpper関数、今私が得意でないのは、デコ関数にパラメータとしてnew_funcを渡し、デコ関数でそのパラメータを呼び出すという主な目的があるときにラッパーを使用する理由です。 :結果
def deco(x):
print("before the deco")
a=1
x(a)
print("after the deco")
def new_func(r):
print("this is new function")
wow=deco(new_func)
print(wow)
:
before the deco
this is new function
after the deco
None
だからデコレータでラッパーを使用することは何ですか?
'print(wow(12))'と 'print(wow)'には違いがあります。後者の場合、関数を返さないことさえあります。 –
違いがあります。最初の方法は関数を返すことであり、2番目の方法は何も返さないことです。両方の呼び出しの後に 'print(type(wow))'を追加すれば、それを見ることができます。 – PerunSS