python 变量函数作用域LEGB简单理解

本博客主题

高扩展、安全、稳定、响应式布局多功能模板。

¥69 现在购买

特别声明:文章多为网络转载,资源使用一般不提供任何帮助,特殊资源除外,如有侵权请联系!

了解作用域:

1.变量的作用域:是指一个变量所产生的作用范围,也就是说在哪一个范围内变量能够被解释器所识别。
2.变量分为:全局变量and局部变量
3.全局变量的作用域:全局变量一般声明在函数的外部。整个.py文件内都可以使用,都可以被识别。
4.局部变量的作用域:只能在函数的内部使用,超出范围,变量就不能再使用

python 变量函数作用域LEGB简单理解

变量名解析LEGB法则

搜索变量名的优先级:局部作用域 > 嵌套作用域 > 全局作用域 > 内置作用域
LEGB法则: 当在函数中使用未确定的变量名时,Python会按照优先级依次搜索4个作用域,以此来确定该变量名的意义。首先搜索局部作用域(L),之后是上一层嵌套结构中def或lambda函数的嵌套作用域(E),之后是全局作用域(G),最后是内置作用域(B)。按这个查找原则,在第一处找到的地方停止。如果没有找到,则会出发NameError错误。

L(local)局部作用域

局部变量:包含在def关键字定义的语句块中,即在函数中定义的变量。每当函数被调用时都会创建一个新的局部作用域。
注意:如果需要在函数内部对全局变量赋值,需要在函数内部通过global语句声明该变量为全局变量。

E(enclosing)嵌套作用域(严格的说 E和L就是同一个)

E也包含在def关键字中,E和L是相对的,E相对于更上层的函数而言也是L。与L的区别在于,对一个函数而言,L是定义在此函数内部的局部作用域,而E是定义在此函数的上一层父级函数的局部作用域。主要是为了实现Python的闭包,而增加的实现。

G(global)全局作用域

即在模块层次中定义的变量,每一个模块都是一个全局作用域。也就是说,在模块文件顶层声明的变量具有全局作用域,从外部开来,模块的全局变量就是一个模块对象的属性。
注意:全局作用域的作用范围仅限于单个模块文件内

B(built-in)内置作用域

系统内固定模块里定义的变量,如预定义在builtin 模块内的变量。

 

global关键字


用来在函数或其他局部作用域中使用全局变量,如果不修改全局变量也可以不使用global关键字。global关键字修饰变量后标识该变量是全局变量,对该变量进行修改就是修改全局变量

如果在局部要对全局变量修改,需要在局部也要先声明该全局变量(如下代码)

number = 0 
def small_test():
    global number    # 声明变量number为全局变量
    number += 1
    print (number)   # 1
small_test()
print(number)        # 1

在局部如果不修改全局变量,则可以正常使用全局变量(如下代码)

number = 0
def small_test():
    print(number)
small_test()

 

nonlocal关键字


nonlocal关键字用来在函数或其他作用域中使用外层(非全局)变量,修饰变量后标识该变量是上一级函数中的局部变量,如果上一级函数中不存在该局部变量,nonlocal位置会发生错误(最上层的函数使用nonlocal修饰变量必定会报错)。

  1. nonlocal 表示将变量声明为外层变量(外层函数的局部变量,而且不能是全局变量)

未经允许不得转载:作者:乔越, 转载或复制请以 超链接形式 并注明出处 乔越博客
原文地址:《python 变量函数作用域LEGB简单理解》 发布于2019-06-07

分享到:
赞(2) 打赏

评论 1

8 + 8 =
  1. #1

    我来看看 哈哈

    ade2周前 (09-30)回复
python 变量函数作用域LEGB简单理解

长按图片转发给朋友

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

79代刷网
代刷网各种代刷 售后有保证 代做各种网站有需要留言给我即可!
切换注册

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录
切换登录

注册