python3 之 变量作用域详解

作用域

  •  指命名空间可直接访问的python程序的文本区域,这里的 ‘可直接访问’ 意味着:对名称的引用(非限定),会尝试在命名空间中查找名称;
    1. L:local,局部作用域,即函数中定义的变量;
    2. E:enclosing,嵌套的父级函数的局部作用域,即包含此函数的上级函数的局部作用域,但不是全局的;
    3. G:globa,全局变量,就是模块级别定义的变量;
    4. 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执行有误')
原文地址:https://www.cnblogs.com/gengyufei/p/11352195.html