函数中的python变量范围

时间:2014-07-23 07:24:35

标签: python python-3.x scope

我发现了一个类似的问题Python variable scope error。它与不可变变量有关。但是当我测试可变变量时,我不知道Python解释器如何决定变量的范围。

这是我的示例代码:

def test_immutable():
    a = 1
    b = 2

    def _test():
        print(a)
        print(b)

        a += 1
        print(a)

    _test()

def test_mutable():
    _dict = {}

    def _test():
        print(_test.__dict__)

        _dict['name'] = 'flyer'

         print('in _test: {0}'.format(_dict['name']))

    _test()

    print(_dict['name'])


if __name__ == '__main__':
    # test_immutable()    # throw exception
    test_mutable()    # it's ok

1 个答案:

答案 0 :(得分:2)

Immutable vs mutable与变量作用域有 nothing 。变量只是名称,并且始终以相同的方式工作。甚至在编译时就确定了范围,早在Python知道你将要分配给它们之前。

两个函数之间的区别在于,第一个函数与a运算符直接分配给+=,这会导致a成为本地运算符。第二个分配给内部的一个键 _dict,最终调用dict对象上的一个方法,并且不会影响变量的范围。