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 代码如下
a = "G全局" # 定义了一个全局变量a,并把"G全局"赋值给a
def myfunc():
a = "E局部1" # 定义了一个局部变量a,并把"E局部1"赋值给a def inner():
a = "L局部2" # 定义了一个局部变量a,并把"E局部1"赋值给a
print("inner打印的a:", a)
inner()
print("myfunc打印的a:", a) myfunc()
print("__main__打印的a:", a)
4.2 代码执行结果

4.3 代码结果分析

python——作用域之LEGB规则的更多相关文章
- python作用域与LEGB规则
作用域 什么是命名空间 比如有一个学校,有10个班级,在7班和8班中都有一个叫“小王”的同学,如果在学校的广播中呼叫“小王”时,7班和8班中的这2个人就纳闷了,你是喊谁呢!!!如果是“7班的小王”的话 ...
- Python中的LEGB规则
目标 命名空间和作用域——Python从哪里查找变量名? 我们能否同时定义或使用多个对象的变量名? Python查找变量名时是按照什么顺序搜索不同的命名空间? 命名空间与作用域的介绍 命名空间 大约来 ...
- Python 的 LEGB 规则(转载)
转载:https://mp.weixin.qq.com/s?timestamp=1498528588&src=3&ver=1&signature=DfFeOFPXy44ObCM ...
- python 作用域(LEGB)
def fa(a): b = 200 c = 888 def fb(b): print(b) print(a) print(c) print(sum) return fb c = 2 sum = 10 ...
- 【Python】 命名空间与LEGB规则
命名空间与LEGB规则 之前隐隐约约提到过一些关于Python赋值语句的特殊性的问题,这个问题的根源就在于Python中的变量的命名空间机制和之前熟悉的C也好java也好都不太一样. ■ 命名空间 所 ...
- LEGB规则
链接:https://www.cnblogs.com/GuoYaxiang/p/6405814.html 命名空间 大约来说,命名空间就是一个容器,其中包含的是映射到不同对象的名称.你可能已经听说过了 ...
- 对于python 作用域新的理解
今天看Python习题,看到如下题目 def num(): return [lambda x: i*x for i in range(4)] print([m(2) for m in num()]) ...
- python作用域和多继承
python作用域 python无块级作用域 看c语言代码: #include<stdio.h> int main() { > ) { ; } printf("i = %d ...
- python作用域与命名空间
什么是命名空间 比如有一个学校,有10个班级,在7班和8班中都有一个叫“小王”的同学,如果在学校的广播中呼叫“小王”时,7班和8班中的这2个人就纳闷了,你是喊谁呢!!!如果是“7班的小王”的话,那么就 ...
随机推荐
- 动手实践Mybatis插件
前言 Mybatis的插件开发过程的前提是必须要对Mybatis整个SQL执行过程十分熟悉,这样才能正确覆盖源码保证插件运行,总的来说Mybatis的插件式一种侵入式插件,使用时应该十分注意. 在之前 ...
- GlashFish部署的程序时好时坏,无法访问时报404
1.问题 glashfile部署的程序时好时坏, 有时部署后访问直接就报404错误 查看log, log如下[2017/09/26 18:22:54.820][ ] ERR ...
- 图解vs2015生成JSON实例
在开发的过程中那个会使用到JSON数据,在使用的时候需要将它反序列化进行使用 如果说JSON存在很多实例情况手动敲肯定显得很繁琐而且很容易出错,VS提供了粘贴JSON类的方法. 这是我的JSON文件 ...
- T-SQL基础(三)之子查询与表表达式
子查询 在嵌套查询中,最外面查询结果集返回给调用方,称为外部查询.嵌套在外部查询内的查询称为子查询,子查询的结果集供外部查询使用. 根据是否依赖外部查询,可将子查询分为自包含子查询和相关子查询.自包含 ...
- MSQL基本增删改语句汇总练习
删除约束注意: 网上说是 ALTER TABLE 表名 DROP CONSTRAINT 约束名; 这里的CONSTRAINT 是指primary key,foreign key,unique,等实际的 ...
- webpack4 系列教程(十一):字体文件处理
教程所示图片使用的是 github 仓库图片,网速过慢的朋友请移步<webpack4 系列教程(十一):字体文件处理>原文地址.或者来我的小站看更多内容:godbmw.com 0. 课程介 ...
- mysql用户授权、数据库权限管理、sql语法详解
mysql用户授权.数据库权限管理.sql语法详解 —— NiceCui 某个数据库所有的权限 ALL 后面+ PRIVILEGES SQL 某个数据库 特定的权限SQL mysql 授权语法 SQL ...
- Javascript删除数组里的某个元素
删除array数组中的某个元素,首先需要确定需要删除元素的索引值. ? 1 2 3 4 5 6 7 var arr=[1,5,6,12,453,324]; function indexOf(val){ ...
- Git命令使用小结
一.上传你的代码的基本方式 0.在github网站上登录你的账户cynthiawupore,然后新建一个仓库demo 1.初始化 $ git init 2.添加文件夹下所有文件到仓库 $ git ad ...
- for、for / in循环
1.for循环 循环代码块一定的次数 <!DOCTYPE html> <html lang="en" dir="ltr"> <he ...