作用域:
- 指命名空间可直接访问的python程序的文本区域,这里的 ‘可直接访问’ 意味着:对名称的引用(非限定),会尝试在命名空间中查找名称;
- L:local,局部作用域,即函数中定义的变量;
- E:enclosing,嵌套的父级函数的局部作用域,即包含此函数的上级函数的局部作用域,但不是全局的;
- G:globa,全局变量,就是模块级别定义的变量;
- B:built-in,内建作用域,系统固定模块里面的变量,比如:int,bytearray等
-
搜索变量的优先级顺序:LEGB,即:局部作用域 > 外层嵌套作用域 > 当前模块的全局作用域 > python内置作用域
下面,以一个小实例演示:
1 L = [1,2,3] 2 3 def f1(lst): 4 global L 5 L = lst #这是在做什么?可以么? 6 7 def f2(lst): 8 L += lst #这是在做什么?可以么? 9 10 def f3(lst): 11 L.extend(lst) #这是在做什么?可以么? 12 13 try: 14 f1([4,5,6]) 15 print(L) #[4,5,6] 16 print() 17 except: 18 print('f1执行有误') 19 20 try: 21 f2([4,5,6]) 22 print(L) #f2执行有误,报错,L只在函数内部定义 23 print() 24 except UnboundLocalError: 25 print('f2执行有误') 26 27 try: 28 f3([4,5,6]) 29 print(L) #优先级,当函数内部找不到L时,向上寻找L 30 print() 31 except: 32 print('f3执行有误')