擅长:python、mysql、java
<p>您可以像下面这样创建变量,当函数被调用时,这些变量将有效地成为函数的局部变量。这将使用<code>eval()</code>,如果在不受信任的输入上使用,这可能是不安全的,但在这里,它不是用来执行修饰函数的编译字节码的情况(而是<em>caveat emptor</em>)。你知道吗</p>
<pre><code>def local_vars(**kwargs):
""" Create decorator which will inject specified local variable(s) into
function before executing it.
"""
def decorator(fn):
def decorated():
return eval(fn.__code__,
{k: v() for k, v in kwargs.items()}) # call funcs
return decorated
return decorator
def get_object_a(): return 13
def get_object_b(): return 42
# create abbreviation for the long decorator
obj_decorator = local_vars(obj_a=get_object_a, obj_b=get_object_b)
@obj_decorator # apply decorator
def test():
print(obj_a)
print(obj_b)
test()
</code></pre>
<p>输出:</p>
<pre class="lang-none prettyprint-override"><code>13
42
</code></pre>