引数を変更するが、私の機能のワークフローを変えるために、私は複数のデコレータを使用しようとしているコードのこの部分で、この奇妙な動作 を示しpythonの複数のデコレータは、私はPythonのデコレータを理解しようと
これはコード
ですdef myfilter(f):
def decorator(data):
if data['num'] %2 == 0:
data['num'] = 90
f(data)
return decorator
def myduplicator(f):
def decorator(data):
print 'duplicator data', data
f(data)
print 'duplicator data', data
f(data)
return decorator
@myduplicator
@myfilter
def testone(data):
print data
for i in range(3):
testone({'num': i})
そして、これはmyduplicatorでデコレータの2回目の呼び出しは、変更データの結果を持っている理由を答え
duplicator data {'num': 0}
{'num': 90}
duplicator data {'num': 90}
{'num': 90}
duplicator data {'num': 1}
{'num': 1}
duplicator data {'num': 1}
{'num': 1}
duplicator data {'num': 2}
{'num': 90}
duplicator data {'num': 90}
{'num': 90}
ある
print 'duplicator data', data
f(data)
それはデコレータが何をするかだから私が欲しい結果が
duplicator data {'num': 0}
{'num': 90}
duplicator data {'num': 0}
{'num': 90}
duplicator data {'num': 1}
{'num': 1}
duplicator data {'num': 1}
{'num': 1}
duplicator data {'num': 2}
{'num': 90}
duplicator data {'num': 2}
{'num': 90}
をそして、私は適用したい場合、私は何ができるか二度デコレータを次の?私は嚥下のコピーの構造/ dictを行う必要がありますか? –