擅长:python、mysql、java
<p>不,装饰者包装一个函数,这意味着他们可以在函数前后添加自己的行为。它们不能像您的示例那样更改函数“中间”发生的事情(更不用说像递归示例那样更改该函数调用的其他函数中间发生的事情)。你知道吗</p>
<p>您可以创建一个类似decorator的函数,它接受<code>takeData_*</code>函数作为参数并进行更新,因此您可以执行以下操作:</p>
<pre><code>def updateAndCall(func, params):
s = updateParams(params)
func(s)
def takeData(s):
updateAndCall(takeData_1, s)
updateAndCall(takeData_2, s)
</code></pre>
<p>然而,这是否有用取决于各种功能之间的相互作用。特别是,使用这种方法,每次“更新”都会发生在原始的<code>s</code>;更新不会随着第二次调用的更新<code>s</code>而累积</p>