この質問への拡張です:https://stackoverflow.com/a/37568895/2290820 オプションで機能上のデコレータを有効または無効にする方法。これらの行でどのように再帰的な関数呼び出しでデコレータが呼び出されるようにするには?
、私は再帰呼び出しで呼び出されますデコレータを作るために、このような何かを思い付いた:再帰関数にデコレータを試して
def deco(f):
def fattr(attr):
f.attr = attr
def closure(*args):
f(*args)
f.unwrap = f
f.closure = closure
return f
return fattr
@deco
def printa(x):
if x > 1:
print x
return printa(x-1)
else:
print x
return
printa({1:1})(5)
# do the same call w/o deocorator
def finta(x):
if x > 1:
print x
return finta(x-1)
else:
print x
return
finta(5) # this works
。明らかに、printa
再帰バージョンは、それがすべき方法ではありません。
私は
g = printa({1:1})
g.closure(5)
はデコレータのオプションをオンまたはそのオプションを使用しないように行うことができます。とにかく、デザインの良し悪しにかかわらず、再帰呼び出しでデコレータを呼び出すにはどうすればいいですか?
私はこれがトピックから投票された理由を知りません。これはとても話題です! – user2290820