python的变量作用域共四种:局部作用域local、嵌套作用域enclosing function locals、全局作用域global、内置作用域builtin
先看变量名的产生:赋值语句=,import、def,函数内部还有形参。
-
局部作用域:
一般新创建一个函数,都会生成一个局部空间,也就有一个局部作用域。没有特殊声明的情况下,和其他作用域互不影响。
-
嵌套作用域:
多重嵌套函数里会产生。嵌套函数中,内部函数无法修改外部函数里的变量。
-
全局作用域:
限于单文件内部,一般情况下不能在函数内部即局部作用域和嵌套作用域中产生影响,需要在局部作用域中调用这个变量时,需要使用global语句。
-
内置作用域:
标准库的builtin模块实现。
python查找变量名的顺序由内向外:
1、查找最内层,一般是局部作用域local。
2、上一层未找到,继续查找外层嵌套作用域
3、仍然未找到,在文件模块里查找,即全局作用域
4、未找到,查找内置作用域
5、还是没找到,异常。
注意点:
1、在局部作用域或者嵌套作用域中使用全局变量<