Python:来自更高范围的变量"在赋值之前引用"

时间:2016-11-11 18:24:35

标签: python scope

假设我有一个方法foo:

def foo(string):
    def bar1():
        if '1' in string:
            string = string[2:]
        else:
            bar2()

    def bar2():
        if ('2' in string):
            string.insert(5, '1')
        else:
            string.insert(5, '2')

    bar1()

不幸的是,这会返回一个错误,指出在分配之前引用了局部变量string。我认为该字符串将继承自foo的范围。我错了吗?请注意,变量string实际上是一个列表(抱歉混淆)。

1 个答案:

答案 0 :(得分:1)

对变量的赋值在本地范围内创建一个新变量,除非使用nonlocal关键字(仅限Python 3):

https://www.python.org/dev/peps/pep-3104/