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 内建模块命名空…
作用域 什么是命名空间 比如有一个学校,有10个班级,在7班和8班中都有一个叫“小王”的同学,如果在学校的广播中呼叫“小王”时,7班和8班中的这2个人就纳闷了,你是喊谁呢!!!如果是“7班的小王”的话,那么就很明确了,那么此时的7班就是小王所在的范围,即命名空间 globals.locals 在之前学习变量的作用域时,经常会提到局部变量和全局变量,之所有称之为局部.全局,就是因为他们的自作用的区域不同,这就是作用域 locals globals LEGB 规则 Python 使用 LEGB 的顺…
目标 命名空间和作用域——Python从哪里查找变量名? 我们能否同时定义或使用多个对象的变量名? Python查找变量名时是按照什么顺序搜索不同的命名空间? 命名空间与作用域的介绍 命名空间 大约来说,命名空间就是一个容器,其中包含的是映射到不同对象的名称.你可能已经听说过了,Python中的一切——常量,列表,字典,函数,类,等等——都是对象. 这样一种“名称-对象”间的映射,使得我们可以通过为对象指定的名称来访问它.举例来说,如果指定一个简单的字符串a_string = "Hello st…
转载:https://mp.weixin.qq.com/s?timestamp=1498528588&src=3&ver=1&signature=DfFeOFPXy44ObCMO3yMBLLgt5iFzbFAuShvog4m*JYf1w-gLIDZd7VoPWJN5f36DbVcaBJi33DkfXw6i-h*F7gM*qBiKrvEojeqD8crEpQyRQ7OzifPqK*wkWqcaPnxUtRtkqh-e2uJcehhs2z35FAgJgxoJ4Pv2NJ81NVDf24…
def fa(a): b = 200 c = 888 def fb(b): print(b) print(a) print(c) print(sum) return fb c = 2 sum = 10000 fa(100)(555) # python作用域:LEGB 输出: 55510088810000…
命名空间与LEGB规则 之前隐隐约约提到过一些关于Python赋值语句的特殊性的问题,这个问题的根源就在于Python中的变量的命名空间机制和之前熟悉的C也好java也好都不太一样. ■ 命名空间 所谓命名空间,就是指根据代码区域的不同而对变量名做出的划分,在一个命名空间中往往会有一定的变量名和变量内容的对应关系.在值语义的语言中,变量名往往是变量所指代内容在内存中地址的别称,但是在python中,变量名本身就是一个字符串对象,命名空间只不过是把这个字符串对象和对象对应了起来.进一步来说,其实在…
链接:https://www.cnblogs.com/GuoYaxiang/p/6405814.html 命名空间 大约来说,命名空间就是一个容器,其中包含的是映射到不同对象的名称.你可能已经听说过了,Python中的一切——常量,列表,字典,函数,类,等等——都是对象.这样一种“名称-对象”间的映射,使得我们可以通过为对象指定的名称来访问它.举例来说,如果指定一个简单的字符串  a_string = "Hello string",我们就创建了一个对象“Hello string”的引用…
今天看Python习题,看到如下题目 def num(): return [lambda x: i*x for i in range(4)] print([m(2) for m in num()]) # 求输出结果是什么 我看了半天才明白这应该是一个列表生成式,列表中的元素为四个匿名函数,我本以为每个匿名函数应该是不一样的,因为他们的 i 不一样,所以应该返回的结果也会不同.可当我在命令行输出测试后才发现,完全不是这么回事啊!下面是输出结果 [6, 6, 6, 6] # 是真的6啊 后来去网上搜…
python作用域 python无块级作用域 看c语言代码: #include<stdio.h> int main() { > ) { ; } printf("i = %d", i); ; } 在这段代码中,if子句引入了一个局部作用域,变量i就存在于这个局部作用域中,但对外不可见,因此,接下来在printf函数中对变量i的引用会引发编译错误,但是在python中并非如此 看下面代码: if 1 == 1: name = 'fuzj' print(name) 在这段代…
什么是命名空间 比如有一个学校,有10个班级,在7班和8班中都有一个叫“小王”的同学,如果在学校的广播中呼叫“小王”时,7班和8班中的这2个人就纳闷了,你是喊谁呢!!!如果是“7班的小王”的话,那么就很明确了,那么此时的7班就是小王所在的范围,即命名空间 globals.locals locals: def test(): a= b= print(locals()) #{, } test() globals a= b= def test(): a= b= print(globals())#{'_…
作用域是指变量的生效范围,例如本地变量.全局变量描述的就是不同的生效范围. python的变量作用域的规则非常简单,可以说是所有语言中最直观.最容易理解的作用域. 在开始介绍作用域之前,先抛一个问题: x=1 def f(): x=3 g() print("f:",x) # 3 def g(): print("g:",x) # 1 f() print("main:",x) # 1 上面的代码将输出3.1.1.解释参见再述作用域规则.另外,个人建议…
转载文章 转载文章 作者:骏马金龙 出处:http://www.cnblogs.com/f-ck-need-u/p/9925021.html Python作用域详述 作用域是指变量的生效范围,例如本地变量.全局变量描述的就是不同的生效范围. python的变量作用域的规则非常简单,可以说是所有语言中最直观.最容易理解的作用域. 在开始介绍作用域之前,先抛一个问题: x=1 def f(): x=3 g() print("f:",x) # 3 def g(): print("g…
一.命名空间.作用域.LEGB法则. 1.命名空间和作用域 : 命名空间:变量名称与值的映射关系 作用域:变量作用的区域,即范围. 注意:class/def/模块会产生作用域:分支语句,循环语句,异常处理语句不会产生新的作用域. 2.作用域的类型区分: 命名空间:变量名称与值的映射关系 作用域:变量作用的区域,范围. 作用域分类型: 局部作用域:Local 简称 L 嵌套作用域:Enclosing 简称 E 全局作用域: Global 简称 G 内置作用域:Builtin 简称 B 3.LEGB…
什么是命名空间 == 对一个名字起作用的范围 # def test():# print("----test----") # import test# test.test() # from test import * # LEGB规则 locals > enclosing function > globals > builtins(内件)# 查看内件 dir(__builtins__)# L局部变量# enclosing 闭包 a = 100 #全局变量 def tes…
作用域链查找规则获取值和设置值 <script> /** 1.作用域链查找规则 私有作用域出现的一个变量不是私有的,则往上一级作用域查找,上级作用域没有则继续向上级查找,一直找到window为止,如果window也没有了? 1)如果是获取值,则报错 2)如果是设置值,则相当于给window设置了一个属性 2.js代码一旦报错,则不往下执行了. */ function fn() { console.log(total); //获取值 total = 100; //设置值 } fn(); cons…
Python之路Python作用域.匿名函数.函数式编程.map函数.filter函数.reduce函数 一.作用域 return 可以返回任意值例子 def test1(): print("test1") def test(): print("test") return test1 res = test() print(res) 输出结果 test <function test1 at 0x021F5C90> 分析:这里print(res)输出的是te…
上节课总结 1 运算符 in 字符串 判断  : “hello” in "asdasfhelloasdfsadf" 列表元素判断:"li" in ['li', 'ok'] 字典key判断:key in dic.keys() 2 基本的数据类型 类名() 其实就是执行类的 __init__ int() __init__(self,args,base=10) int a. 创建方式 两种 n1 = 123 # 根据int类,创建了一个对象 n2 = int(123) #…
可以先看:http://www.cnblogs.com/youxin/p/3645734.html 几个概念:python能够改变变量作用域的代码段是def.class.lamda.if/elif/else.try/except/finally.for/while 并不能涉及变量作用域的更改,也就是说他们的代码块中的变量,在外部也是可以访问的变量搜索路径是:本地变量->全局变量 作用域搜索规则: LEGB Rule. L. Local. (Names assigned in any way wi…
Python 变量作用域的规则是 LEGB LEGB含义解释: L -- Local(function):函数内的名字空间 E -- Enclosing function locals:外部嵌套函数的名字空间(例如closure) G -- Global(module):函数定义所在模块(文件)的名字空间 B -- Builtin(Python):Python内置模块的名字空间 一.Builtin 该部分其实主要是 Python 自带的 内置命名空间,主要是 内置函数,异常类 等.可以通过 di…
python的作用域 作用域也叫名字空间,是访问变量时查找变量名的范围空间 python中的四个作用域 LEGB 作用域 英文解释 英文缩写 局部作用域 Local(function) L 外部嵌套函数作用域 Enclosing Function local E 函数定义所在模块(文件)的作用域 Global(module) G Python内建模块的作用域 Builtin(python) B 示例: # 此示例示意作用域 v = 100 def f1(): v = 200 print("f1.…
以下依据Python 3 1.Python变量查找顺序为LEGB(L:Local,E:Enclosing,G:Global,B:Built-in). 2.实际上,在Python中,只有模块,类以及函数才会引入新的作用域,其它的代码块是不会引入新的作用域的.…
命名空间,闭包原理,参考点击本文 一.问题描述 fun = [lambda x: x*i for i in range(4)] for item in fun: print(item(1)) 上述式子的输出结果: 预计结果为:0, 2, 4, 6 实际输出为:3, 3, 3, 3 原理:i 在外层作用域 lambda x: x*i 为内层(嵌)函数,他的命名空间中只有 {'x': 1} 没有 i , 所以运行时会向外层函数(这儿是列表解析式函数 [ ])的命名空间中请求 i 而当列表解析式运行时…
在介绍类之前,我首先要告诉你一些Python的作用域规则.类定义对命名空间有一些巧妙的技巧,你需要知道作用域和命名空间如何工作才能完全理解正在发生的事情.顺便说一下,关于这个主题的知识对任何高级Python程序员都很有用. 让我们从一些定义开始. namespace 是一个从名字到对象的映射.大部分命名空间当前都由 Python 字典实现,但一般情况下基本不会去关注它们(除了要面对性能问题时),而且也有可能在将来更改.下面是几个命名空间的例子:存放Python内置函数的集合(包含 abs() 这…
作用域 作用域分为: 全局作用域 局部作用域 在函数内部的作用域叫做局部作用域,局部作用域中的变量叫做局部变量 非函数内部的作用域叫做全局作用域,全局作用域中的变量叫做全局变量 局部作用域可以使用全局变量,全局变量不能试用局部变量 变量的使用规则: 从内向外,找到后返回 函数作用域中命名全局变量global def fn(): global 变量 # 现在改变量为全局变量 # 注意:不可以在函数中先使用一个全局变量后在用该变量命名局部变量 报错: a = 1 def fn(): print(a)…
本节内容: 课前准备知识: 函数嵌套函数的使用方法: 我们在使用函数嵌套函数的时候,是学习装饰器的时候,出现过,由一个函数返回值是一个函数体情况. 我们在使用函数嵌套函数的时候,最好也这么写. def test(): name= def test1(): print(name) return test1 test()() 通过返回值调用嵌套函数.或者你想执行函数test1的函数体,也可以如下操作但是不建议这么做. def test(): name= def test1(): print(name…
     正则表达式在我看来是提供一个模板,将待匹配的字符串与模板匹配,匹配不到则返回为空,匹配成功根据需要返回匹配的字符串. 正则表达式比字符串本身的功能要强一点,当然性能上略有不如. 我们使用正则表达式主要有两种目的,  > 是否包含模板字符串: > 得到匹配字符串. python 中使用正则表达式时需要引入“re”模块,为了避免记忆上的混乱,本文只记载一种最常用的使用正则表达式的方式. 使用流程: # encoding:utf-8 # 引入re模块 import re #生成正则表达式模…
今天出了个低级的错误,最后确定是作用域问题,特回顾知识点如下: 在Python程序中创建.改变.查找变量名时,都是在一个保存变量名的空间中进行,我们称之为命名空间,也被称之为作用域. Python的作用域是静态的,在源代码中变量名被赋值的位置决定了该变量能被访问的范围.即Python变量的作用域由变量所在源代码中的位置决定. 作用域的产生: 1,只有当变量在Module(模块).Class(类).def(函数)中定义的时候,才会有作用域的概念. 2,在作用域中定义的变量,一般只在作用域中有效.…
一.作用域 return 可以返回任意值例子 def test1(): print("test1") def test(): print("test") return test1 res = test() print(res) 输出结果 test <function test1 at 0x021F5C90> 分析:这里print(res)输出的是test1函数在内存中的地址,return也是可以返回的,加上括号就可以运行函数了 例子2 name = &q…
对于含有 __init__.py 的目录(如adir),其实它就是一个package,它的子目录如果也包含 __init__.py,则只要将 adir 加入 sys.path,则它的字目录就不用加了,python在import的时候会自动遍历所有含有 __init__.py 的子目录. python文件的引入有2中方式:1.作为顶层执行脚本(执行入口)而加载:2.作为模块被引入.如果你直接执行一个python文件,则它就被当作顶层执行脚本而被加载.如果你使用参数-m (python -m fil…
1.作用域: 在python中,作用域分为两种:全局作用域和局部作用域. 全局作用域是定义在文件级别的变量,函数名.而局部作用域,则是定义函数内部. 关于作用域,我要理解两点:a.在全局不能访问到局部定义的变量 b.在局部能够访问到全局定义的变量,但是不能修改全局定义的变量(当然有方法可以修改) 下面我们来看看下面实例: x = 1 def funx(): x = 10 print(x) # 打印出10 funx() print(x) # 打印出1 如果局部没有定义变量x,那么函数内部会从内往外…