作用域就是一个 Python 程序可以直接访问命名空间的正文区域。
在一个 python 程序中,直接访问一个变量,会从内到外依次访问所有的作用域直到找到,否则会报未定义的错误。
Python 中,程序的变量并不是在哪个位置都可以访问的,访问权限决定于这个变量是在哪里赋值的。
变量的作用域决定了在哪一部分程序可以访问哪个特定的变量名称。Python 的作用域一共有4种,分别是:
有四种作用域:
规则顺序: L –> E –> G –> B。
LEGB法则
在局部找不到,便会去局部外的局部找(例如闭包),再找不到就会去全局找,再者去内置中找。
1 #作用域 2 a1 = 10 #全局作用域 3 def pri(): 4 print(a1) 5 pri() 6 7 8 def pri1(): 9 a2 = 20 #局部作用域 10 print(a2) 11 pri1() 12 #print(a2) #这句这样写则会报错,因为a2的作用域只在函数内部并不是全局作用域,注意区别 13 14 15 #嵌套作用域 16 def f1(): 17 n = 10 #在f1函数中,是局部作用域 相对于f2函数,是嵌套作用域 18 def f2(): 19 m = 20 #局部作用域 20 print(n) 21 f2() 22 23 24 #内置作用域 系统自带 25 print(__name__) #内置作用域