我发现了一个类似的问题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
答案 0 :(得分:2)
Immutable vs mutable与变量作用域有 nothing 。变量只是名称,并且始终以相同的方式工作。甚至在编译时就确定了范围,早在Python知道你将要分配给它们之前。
两个函数之间的区别在于,第一个函数与a
运算符直接分配给+=
,这会导致a
成为本地运算符。第二个分配给内部的一个键 _dict
,最终调用dict对象上的一个方法,并且不会影响变量的范围。