我想在嵌套函数中定义变量,以便在嵌套函数中进行更改,例如
def nesting():
count = 0
def nested():
count += 1
for i in range(10):
nested()
print count
当调用嵌套函数时,我希望它打印10,但它会引发UnboundLocalError。全球关键词可以解决这个问题。但由于变量计数仅用于嵌套函数的范围,我希望不要将其声明为全局变量。这样做的好方法是什么?
答案 0 :(得分:21)
在Python 3.x中,您可以使用nonlocal
声明(在nested
中)告诉Python您要在count
中分配nesting
变量。< / p>
在Python 2.x中,您无法从count
分配到nesting
中的nested
。但是,可以通过不分配给变量本身,但使用可变容器来解决它:
def nesting():
count = [0]
def nested():
count[0] += 1
for i in range(10):
nested()
print count[0]
虽然对于非平凡的情况,通常的Python方法是将数据和功能包装在一个类中,而不是使用闭包。
答案 1 :(得分:5)
有点晚了,您可以将属性附加到“嵌套”功能,如下所示:
def nesting():
def nested():
nested.count += 1
nested.count = 0
for i in range(10):
nested()
return nested
c = nesting()
print(c.count)
答案 2 :(得分:0)
对我来说最优雅的方法:在两个python版本上都可以100%工作。
def ex8():
ex8.var = 'foo'
def inner():
ex8.var = 'bar'
print 'inside inner, ex8.var is ', ex8.var
inner()
print 'inside outer function, ex8.var is ', ex8.var
ex8()
inside inner, ex8.var is bar
inside outer function, ex8.var is bar
更多:http://www.saltycrane.com/blog/2008/01/python-variable-scope-notes/