如何在函数函数情况下访问外部函数中定义的变量?

时间:2016-01-23 15:43:27

标签: python python-2.7 python-3.x

>>> def bar():
        abc = 0
        def run():
            global abc
            abc += 1
            print abc
        return run

>>> ccc = bar()
>>> ccc()

Traceback (most recent call last):
  File "<pyshell#52>", line 1, in <module>
    ccc()
  File "<pyshell#50>", line 5, in run
    abc += 1
NameError: global name 'abc' is not defined

如代码所示,变量&#39; abc&#39;在函数&#39; bar&#39;中定义,这是在&#39; bar&#39;中定义的函数。想要访问&#39; abc&#39;,我试图在使用前使用全局声明,但它似乎是内部功能&#39; run&#39;只搜索&#39; abc&#39;在最外层的命名空间中。所以,如何访问&#39; abc&#39;在功能&#39;运行&#39;?

1 个答案:

答案 0 :(得分:1)

如果您使用的是3.x,则可以使用“nonlocal abc”而不是“global abc”

def bar():
    abc = 0
    def run():
        nonlocal abc
        abc += 1
        print (abc)
     return run
2.x中的

您可以使用以下样式

def bar():
    abc = 0
    def run(abc=abc):
         abc += 1
         print abc
    return run