<p>我试图编写一个decorator,它在被调用后“刷新”,但是刷新只在最后一个函数退出后发生一次。下面是一个例子:</p>
<pre><code>@auto_refresh
def a():
print "In a"
@auto_refresh
def b():
print "In b"
a()
</code></pre>
<p>如果调用了<code>a()</code>,我希望在退出<code>a()</code>之后运行刷新函数。如果调用<code>b()</code>,我希望在退出<code>b()</code>之后运行刷新函数,而不是在由<code>b()</code>调用时在<code>a()</code>之后运行。下面是一个类执行此操作的示例:</p>
^{pr2}$
<p>如果我跑的话</p>
<pre><code>b()
print '---'
b(refresh=True)
print '---'
b(refresh=False)
</code></pre>
<p>我得到以下输出:</p>
<pre><code>Initializing decorator
Initializing decorator
Before function
In b
Before function
In a
After function
After function
---
Before function
In b
Before function
In a
After function
After function
Refreshing
---
Before function
In b
Before function
In a
After function
After function
</code></pre>
<p>因此,当以这种方式编写时,不指定<code>refresh</code>参数意味着刷新默认为<code>False</code>。有人能想出一种方法来改变它,使<code>refresh</code>在未指定时是<code>True</code>?改变</p>
<pre><code>refresh = False
</code></pre>
<p>到</p>
<pre><code>refresh = True
</code></pre>
<p>装潢师不工作:</p>
<pre><code>Initializing decorator
Initializing decorator
Before function
In b
Before function
In a
After function
Refreshing
After function
Refreshing
---
Before function
In b
Before function
In a
After function
Refreshing
After function
Refreshing
---
Before function
In b
Before function
In a
After function
Refreshing
After function
</code></pre>
<p>因为refresh在第一种和第二种情况下被调用多次,在最后一种情况下调用一次(在第一种和第二种情况下应该是一次,而不是在最后一种情况下)。在</p>