如何在嵌套函数中更改嵌套函数的变量

时间:2011-06-01 09:05:54

标签: python global-variables nested-function

我想在嵌套函数中定义变量,以便在嵌套函数中进行更改,例如

def nesting():
    count = 0
    def nested():
        count += 1

    for i in range(10):
        nested()
    print count

当调用嵌套函数时,我希望它打印10,但它会引发UnboundLocalError。全球关键词可以解决这个问题。但由于变量计数仅用于嵌套函数的范围,我希望不要将其声明为全局变量。这样做的好方法是什么?

3 个答案:

答案 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/