【发布时间】:2014-09-27 04:54:16
【问题描述】:
在 Python 中将多个函数包装在循环中的正确方法是什么?
我有通用包装器和函数列表。我需要将列表中的所有函数包装在一个循环中,但for f in funcs: 对我不起作用。
执行此操作的正确方法是什么?
def orig_func1(x, y):
print "x=%i y=%i" % (x,y)
def orig_func2(a, b):
print "a=%i b=%i" % (a,b)
def wrapper(func):
f_name = func.__name__
print 'adding hook for function [%s]' % f_name
def inner(*args, **kwargs):
print 'I am before original function'
ret = func(*args, **kwargs)
print 'I am after original function'
return ret
return inner
funcs = [orig_func1, orig_func2]
print funcs
for f in funcs:
f = wrapper(f)
print funcs
结果表明列表中的函数没有改变:
[<function orig_func1 at 0x022F78F0>, <function orig_func2 at 0x022F7930>]
adding hook for function [orig_func1]
adding hook for function [orig_func2]
[<function orig_func1 at 0x022F78F0>, <function orig_func2 at 0x022F7930>]
x=1 y=2
a=3 b=4
【问题讨论】:
-
在该循环中,
f只不过是一个局部变量。除非您直接修改列表,否则您不会更改任何有意义的内容。 -
你到底想完成什么?
标签: python function wrapper decorator