python——做用域之LEGB规则

1 变量的做用域闭包

  Python是静态做用域,也就是说在Python中,变量的做用域源于它在代码中的位置;在不一样的位置,可能有不一样的命名空间。命名空间是变量做用域的体现形式。函数

2 LEGB各自表明的含义ui

  2.1  L-Local
    函数内的命名空间。做用范围:当前整个函数体范围。

  2.2 E-Enclosing function locals
    外部嵌套函数的命名空间。做用范围:闭包函数。

  2.3 G-Global
    全局命名空间。做用范围:当前模块(文件)。
  2.4 B-Builtin
    内建模块命名空间。做用范围:全部模块(文件)。spa

  注意:Python中没有块级做用域。块级做用域,代码块中的变量,好比 if while for 后的代码。code

3 LEGB规则
  LEGB规则就是按照 L->E->G->B的顺序进行查找变量。也就说,当不一样命名空间具备相同变量名称的变量时,咱们首先查找局部变量,若是没查到,再向全局变量查找。blog

4 基于命名空间的常见变量类型作用域

  4.1 局部变量io

    在一个函数内部定义的变量。做用域为函数内部。查看局部变量命令:locals()。function

 

  4.2 全局变量class

    在函数外部,文件最外层定义的变量。做用域为整个文件内部。查看全局变量命令:globals()


  4.3 注意
    变量访问原则:从内到外。全局变量和局部变量重名时,采用就近原则。

 

4 案例讲解

  4.1 代码以下

 1 a = "G全局"                         # 定义了一个全局变量a,并把"G全局"赋值给a
 2 def myfunc():
 3     a = "E局部1"                    # 定义了一个局部变量a,并把"E局部1"赋值给a
 4 
 5     def inner():
 6          a = "L局部2"                # 定义了一个局部变量a,并把"E局部1"赋值给a
 7          print("inner打印的a:", a)   
 8     inner()
 9     print("myfunc打印的a:", a)
10 
11 
12 myfunc()
13 print("__main__打印的a:", a)

 

   4.2 代码执行结果

    

 

  4.3 代码结果分析

    

相关文章
相关标签/搜索