zoukankan      html  css  js  c++  java
  • python——作用域之LEGB规则

    1 变量的作用域

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

    2 LEGB各自代表的含义

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

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

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

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

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

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

      4.1 局部变量

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

      4.2 全局变量

        在函数外部,文件最外层定义的变量。作用域为整个文件内部。查看全局变量命令: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 代码结果分析

        

  • 相关阅读:
    完全卸载Oracle方法、步骤
    使用oracle11g_instant_client来解决在不安装oracle客户端的情况下连接服务端
    Android系统中的6种模式
    现代汉语常用3500字
    debug1: Could not open authorized keys
    所选用户秘钥未在远程主机上注册
    directshow播放摄像头卡死问题
    linux设置静态IP
    gcc编译错误
    centos6.4编译gcc6.4
  • 原文地址:https://www.cnblogs.com/cuizhu/p/9464109.html
Copyright © 2011-2022 走看看