返回顶部
首页 > 资讯 > 后端开发 > Python >Python中的LEGB规则
  • 439
分享到

Python中的LEGB规则

2023-06-02 09:06:46 439人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

前言理解LEGB前,首先需要对python的作用域、命名空间有一定的了解,话题才能继续展开。命名空间命名空间表示变量的可见范围,一个变量名可以定义在多个不同的命名空间,相互之间并不冲突,但同一个命名空间中不能有两个相同的变量名。比如:两个叫

前言

理解LEGB前,首先需要对python的作用域、命名空间有一定的了解,话题才能继续展开。

命名空间

命名空间表示变量的可见范围,一个变量名可以定义在多个不同的命名空间,相互之间并不冲突,但同一个命名空间中不能有两个相同的变量名。比如:两个叫“张三”的学生可以同时存在于班级A和班级B中,如果两个张三都是一个班级,那么带来的麻烦复杂很多了,在Python中你不能这么干。

在Python中用字典来表示一个命名空间,命名空间中保存了变量(名字)和对象的映射关系,在Python中命名空间出现在哪些地方呢?有函数范围内的命名空间(local),有模块范围内的命名空间(global),有python内建的命名空间(built-in),还有类对象的所有属性组成的命名空间。

命名空间的生命周期

所有的命名空间都是有生命周期的,对于python内建的命名空间,python解析器启动时创建,一直保留直至直python解析器退出时才消亡。而对于函数的local命名空间是在函数每次被调用的时候创建,调用完成函数返回时消亡,而对于模块的global命名空间是在该模块被import的时候创建,解析器退出时消亡。

作用域

一个作用域是指一段程序的正文区域,可以是一个函数或一段代码。一个变量的作用域是指该变量的有效范围。Python的作用域是静态作用域,因为它是由代码中得位置决定的,而命名空间就是作用域的动态表现。

LGB

Python2.2之前定义了三个作用域,分别是:

global作用域,对应的global命名空间,一个模块最外层定义的一个作用域。
local作用域,对应local命名空间,由函数定义的。
builtin作用域,对应builtin命名空间,python内部定义的最顶层的作用域,在这个作用域里面定义了各种内建函数:open、range、xrange、list等等。
那时的Python作用域规则叫做LEB规则,变量(名字)的引用按照local作用域、global作用域、builtin作用域的顺序来查找。

首先来看一段代码:

a = 1 def foo():    a = 2    print a   //[1] print a       //[2] foo()

[1]处输出结果为2,Python首先会在函数foo定义的local作用域中查找名字a,如果找到了直接输出,没有没找到就会在模块定义的global作用域中查找,如果还没找到,就到Python内建的builtin作用域中查找a,如果还没找到就报异常:NameError: name ‘a’ is not defined。

[2]处输出结果为1,查找顺序同样是按照LGB规则,只不过这里的local作用域就是global作用域。

LEGB规则

Python2.2开始引入嵌套函数,嵌套函数为python提供了闭包实现。

a = 1def foo():   a = 2   def bar():        print a  //[1]    return bar func = foo()func()

函数bar和a=2捆包在一起组成一个闭包,因此这里a=2即使脱离了foo所在的local作用域,但调用func的时候(其实就是调用bar)查找名字a的顺序是LEGB规则,这里的E就是enclosing的缩写,代表的“直接外围作用域”这个概念。查找a时,在bar对应的local作用域中没有时,然后在它外围的作用域中查找a。LEGB规定了查找一个名称的顺序为:local–>enclosing–>global–>builtin。


--结束END--

本文标题: Python中的LEGB规则

本文链接: https://lsjlt.com/news/229540.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Python中的LEGB规则
    前言理解LEGB前,首先需要对Python的作用域、命名空间有一定的了解,话题才能继续展开。命名空间命名空间表示变量的可见范围,一个变量名可以定义在多个不同的命名空间,相互之间并不冲突,但同一个命名空间中不能有两个相同的变量名。比如:两个叫...
    99+
    2023-06-02
  • python的点号运算和LEGB规则的学
    1 封装 2 继承 3 多态 1 python的封装是约定 ,而不是约束, 因为你已经是成年人了. 2 python的继承 实现本质是点号运算 3 python的多态是基于协议,基于行为的多态 1 简单的变量--遵循LEGB查找规则...
    99+
    2023-01-31
    规则 python LEGB
  • 理解 Python 的 LEGB
    理解 Python 的 LEGB 名字空间 Python 的名字空间是 Python 一个非常核心的内容。 其他语言中如 C 中,变量名是内存地址的别名,而在 Python 中,名字是一个字符串对象,它与他指向的对象构成一个{name:...
    99+
    2023-01-31
    Python LEGB
  • Python中关联的规则有哪些
    今天就跟大家聊聊有关Python中关联的规则有哪些,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1. 关联规则大家可能听说过用于宣传数据挖掘的一个案例:啤酒和尿布;据说是沃尔玛超市在...
    99+
    2023-06-14
  • Python的正则规则举例分析
    这篇文章主要讲解了“Python的正则规则举例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python的正则规则举例分析”吧!问题复现我们都知道,Python有个正则规则\w,几乎所有...
    99+
    2023-06-02
  • python开发规则
    1.Python优点:简单、优雅、明确                        python缺点2.强大的模块三房库                                                1.代码不能加密3.易...
    99+
    2023-01-31
    规则 python
  • Python中有哪些关联规则
    这期内容当中小编将会给大家带来有关Python中有哪些关联规则,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1.1 基本概念 项集:item的集合,如集合{牛奶、麦片、糖}是一个3项集,可以认为...
    99+
    2023-06-15
  • python中的变量命名规则详情
    目录1.变量命名1)命名的规范性2)编程语言常用驼峰命名法2. 变量命名的描述性3.变量名尽量短,但是不要太短4.合理使用变量5. 变量定义尽量靠近使用6. 合理使用namedtup...
    99+
    2024-04-02
  • Python中str的语法规则是什么
    Python中str的语法规则如下:1. 字符串由一对单引号、一对双引号或一对三引号括起来。- 单引号示例:'Hello World...
    99+
    2023-08-28
    Python
  • python变量的命名规则
    这篇文章主要讲解了“python变量的命名规则”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“python变量的命名规则”吧!变量的命名:       ...
    99+
    2023-06-02
  • python中自定义函数deque规则
    这篇文章将为大家详细讲解有关python中自定义函数deque规则,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。python可以做什么Python是一种编程语言,内置了许多有效的工具,Pyt...
    99+
    2023-06-14
  • Python函数中的作用域规则详解
    目录1、简单介绍一下闭包2、在Python中,并不是任何代码块都能引入新的作用域3、在Python中,名字绑定在所属作用域中引入新的变量,同时绑定到一个对象。总结Python是静态作...
    99+
    2024-04-02
  • Python中有哪些下划线的潜规则
    本篇内容主要讲解“Python中有哪些下划线的潜规则”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python中有哪些下划线的潜规则”吧!1. 单前导下划线  _var当涉及到变量和方...
    99+
    2023-06-16
  • python中的代码缩进规则是什么
    这篇文章主要介绍“python中的代码缩进规则是什么”,在日常操作中,相信很多人在python中的代码缩进规则是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”python中的代码缩进规则是什么”的疑惑有所...
    99+
    2023-07-02
  • Python缩进规则是什么_Python缩进规则介绍
    1、首先一般的语言都是通过{}或end来作为代码块的标记,而python则是通过缩进来识别代码块的。对于python的这种【缩进】风格,喜欢它的人说这是一种乐趣;不喜欢它的人说这是一门需...
    99+
    2024-04-02
  • linux的iptable规则配置-删除规则
    1、打开linux终端; 2、在终端命令行中输入“iptables -L -n”命令查看出当前的防火墙规则; 3、输入“iptables -L -n –line-number”命令查看到每个规则chain的序列号; 4、根据序列号删除...
    99+
    2023-09-02
    linux 服务器 运维 Powered by 金山文档
  • 什么是python的缩进规则
    本篇内容主要讲解“什么是python的缩进规则”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“什么是python的缩进规则”吧!python的缩进规则:对于类定义、函数定义、流程控制语句、异常处理...
    99+
    2023-06-20
  • python的切片规则有哪些
    在Python中,切片操作用于从一个序列(如字符串、列表、元组)中获取子序列。切片规则如下:1. 基本切片规则:使用[start:s...
    99+
    2023-09-26
    python
  • 深入了解python中的代码缩进规则
    python对缩进有严格要求,下面本篇文章就来带大家深入了解python中的代码缩进规则,希望对大家有所帮助!python是使用缩进来区分不同的代码块,所以对缩进有严格要求。1、缩进不符合规则,解析器会报缩进错误,程序无法运行。2、缩进的不...
    99+
    2022-07-01
    python
  • Python语法规则中的DFA的内容是什么
    这篇文章将为大家详细讲解有关Python语法规则中的DFA的内容是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Grammar.hGraminit.c中定义了包括Python语法规则的D...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作