- python有两种变量,全局变量和局部变量。
- 全局变量的scope是整个module,局部变量是函数或者class。
看一段代码:
def test(a, b):
def inner():
print(a)
print(b)
b = 3
inner()
test(1, 2)
会有一个错误:
可以看到b显示未定义的引用,但是变量a却没有错误。
神奇的是,如果把b=3这一行注释掉,程序就不会报错了。
原因解释
When we use the assignment operator (=) inside a function, its default behaviour is to create a new local variable – unless a variable with the same name is already defined in the local scope.
也就是说使用赋值运算符会定义一个新的本地变量。
要造成上面那个现象还有一个原因甚至可以说是直接原因:
python的内部函数当在函数体中定义了local variable时不会再引用外部的同名变量。