擅长:python、mysql、java
<p>您的问题基本上是是否可以通过引用而不是按值调用装饰器。答案是<a href="https://stackoverflow.com/questions/986006/how-do-i-pass-a-variable-by-reference">yes</a>。执行摘要:传递一个可变对象。在</p>
<p>在这种情况下,这对你没有任何好处。正如您在<code>ratelimit</code>模块的<a href="https://github.com/tomasbasham/ratelimit/blob/master/ratelimit/__init__.py" rel="nofollow noreferrer">code</a>中看到的,在定义修饰函数时,<code>every</code>和{<cd3>}这两个参数用于设置新变量<code>frequency</code>:</p>
<pre><code>frequency = abs(every) / float(clamp(period))
</code></pre>
<p>为了获得一个可变频率,你必须重写模块来支持你的需求,但这应该是可行的。请将以下内容作为最低限度的说明:</p>
^{pr2}$
<p>现在旋转一下:</p>
<pre><code>>>> l = Limiter(1, 2)
>>>
>>> @limit(l)
... def foo():
... pass
...
>>> foo()
2 1
>>> l.every = 10
>>> foo()
2 10
</code></pre>