在Python中修改freevars不起作用?
我试图将一个整数变量附加到任何exist函数,以记录调用它的次数。为了做到这一点,我写下了下面的装饰在Python中修改freevars不起作用?,python,closures,Python,Closures,我试图将一个整数变量附加到任何exist函数,以记录调用它的次数。为了做到这一点,我写下了下面的装饰 def count(fun): n = 0 def wrapper(*args, **kwargs): n += 1 print "%s called %d times" % (fun.func_name, n) fun(*args, **kwargs) return wrapper 但它不起作用,因为内部函数包装中的n在外部作用域计数中不被视为相同的n。我
def count(fun):
n = 0
def wrapper(*args, **kwargs):
n += 1
print "%s called %d times" % (fun.func_name, n)
fun(*args, **kwargs)
return wrapper
但它不起作用,因为内部函数包装中的n在外部作用域计数中不被视为相同的n。我想知道为什么会这样
我知道我可以绕过这个限制的一种方法是使用可变容器(如列表)将数字n放入其中。这对我很有用:
def count(fun):
def wrapper(*args, **kwargs):
wrapper.n += 1
print("%s called %d times" % (fun.__name__, wrapper.n))
fun(*args, **kwargs)
wrapper.n = 0
return wrapper
@count
def test():
print('hello')
def main():
for i in range(5):
test()
if __name__ == '__main__':
main()
这对我很有用:
def count(fun):
def wrapper(*args, **kwargs):
wrapper.n += 1
print("%s called %d times" % (fun.__name__, wrapper.n))
fun(*args, **kwargs)
wrapper.n = 0
return wrapper
@count
def test():
print('hello')
def main():
for i in range(5):
test()
if __name__ == '__main__':
main()
在Python 3中,您将使用
非本地
关键字(与全局
相反):
但我从您的代码中猜测您正在寻找Python 2解决方案。在Python 3中,您将使用
非本地
关键字(与全局
相反):
但我从您的代码中猜测您正在寻找Python 2解决方案。是的,我正在使用Python2,我们的团队明年将切换到Python3。是的,我正在使用Python2,我们的团队明年将切换到Python3。