私はデコレータについて少し知っています。私の理解不足で デコレータ関数は元の関数を構築するものは何でも飾ら目的球宣言戻る(最も合理的にこれは呼び出し可能でなければなりません):Pythonで引数を付けてデコレートするのはどういう意味ですか?
def deco(func):
def func_wrapper(name):
return func(name)+", how are you?"
return func_wrapper
@deco
def foo(name):
return "Hello "+name
print(foo("Michael"))
これが与える:
Hello Michael, how are you?
しかし、何場合をデコレータは、引数と一緒に指定されています。
def deco2(info):
def info_decorator(func):
def func_wrapper(name):
return func(name) + info
return func_wrapper
return info_decorator
@deco2(", how are you?")
def foo2(name):
return "Hello "+name
print(foo2("Regina"))
は
を与えますHello Regina, how are you?
このデコレータを扱うための「ルール」とは何ですか? それ代わりに返すのでfoo2
Pythonが最初に与えられた引数とdeco2
を呼び出す、と思われる、とは、この呼び出しはまず前の順序で渡されたfoo2はとのような役割を果たしデコレータのための工場を構築することを、を想定しています最終的なラッパーを返す。しかし、この場合、追加の「層」(2つではなく3つのdefs)があります。これは私にとって難しく、一般的なルールを特定します。
2番目のデコレータは 'foo2 = deco2("、どうやってですか? ")(foo2)'と 'foo2'の後に置かれます。 –
私は知っていますが、最初のケースではfooの後に 'foo = deco(foo)'が置かれます。それは、Pythonが追加の間接参照を追加することを知っているデコレータの引数ですか? – michael