擅长:python、mysql、java
<p>这有点老套,但是这个decorator的实现似乎能满足您的需要。必须使<code>arg3</code>变量显示为全局变量,因为它在由<code>func()</code>的定义生成的字节码中被引用,因此它不是真正的函数参数,但在本例中这似乎并不重要。在</p>
<pre><code>from functools import wraps
def addarg(arg):
def decorate(func):
@wraps(func)
def wrapped(*args):
global_vars, local_vars = {'func': func, 'args': args}, {}
func.__globals__.update(arg3=arg)
exec('_result = func(*args)', global_vars, local_vars)
return local_vars['_result']
return wrapped
return decorate
@addarg(3)
def func(arg1, arg2):
return arg1 + arg2 + arg3
if __name__ == "__main__":
print(func(1, 2)) # -> 6
</code></pre>