Python中变量的作用域可分为4种:
本地作用域:没有内部函数时,函数体为本地作用域。
函数嵌套作用域:包含内部函数时,函数体为函数嵌套作用域
文件作用域:程序文件(也称模块文件)的内部为文件作用域。
内置作用域:Python运行时的环境为内置作用域,它包含了Python的各种预定义变量和函数
内置和文件作用域可称为全局作用域
作用域外部的变量和函数可以在作用域内使用;
相反,作用域内的变量和函数不能在作用域外使用
全局变量:内置作用域和文件作用域钟定义的变量和函数
局部变量:在函数嵌套作用域和本地作用域内定义的变量和函数
本地优先:当作用域外和作用域内的变量名称相同时,以本地优先,默认屏蔽外面的变量
a=1 def show(): print('a=',a) a=2 show()
这样会出错是因为在函数中,引用了变量a,但是在函数中内部a的赋值语句,所以函数内部是内部a的作用域
因此会出错
1,global 声明变量为全局变量
def show(): global a a=2 print('a=',a,sep='') show() print(a)
def show(): global a print(a) a=5 a=1 show() print(a)
2,nonlocal原则
作用域隔离原则同样适用于嵌套函数。在嵌套函数内使用与外层函数同名的变量时,
若该变量在嵌套函数内部没有被赋值,则该变量就是外层函数的本地变量
def show(): def hh(): nonlocal a #表示a时外层函数的本地变量 print(a) a=2 #a必须定义在调用hh之前 hh() show()
nonlocal不能定义在最外层函数中