咨询热线:15259525368 联系人:源海 地址:新疆维吾尔自治省乌鲁木齐市乌鲁木齐市新华凌市场北区2栋29号奥特门业
我和Python的Py交易》》》》》》 命名空间的小弟作用域
来源:ballbet贝博亚洲官网 发布时间:2019-11-29 点击量:415
命名空间的小弟作用域
在这要明确一个观点,在Python中万物皆对象,而变量指向的就是对象。
变量可以是 类名,函数名,储存数据的变量……
对象可以是 类 ,被封装的一段代码(函数),数据……
命名空间
命名空间是从名字到对象的映射。在Python大多数命名空间目前以字典的形式实现。变量名是“键”,对象(内置函数,内置常量,内置类型,函数,类,变量)是“值”。
各个命名空间是独立的,没有任何关系的,所以一个命名空间中不能有重名,但不同的命名空间是可以重名而没有任何影响。
命名空间都是有创建时间和生存期的。对于Python built-in namespace(内置命名空间——内置函数,内置常量,内置类型)组成的命名空间,它在Python解释器启动的时候被创建,在解释器退出的时候才被删除;
对于一个Python 模块的global namespace(全局变量),它在这个模块被 引用的时候创建,在解释器退出的时候退出;
对于一个函数的local namespace(局部作用域),它在函数每次被调用的时候创建,函数返回的时候被删除。
作用域
作用域只是命名空间表示大小(适用范围)的属性。
作用域是Python程序(文本)的某一段或某些段,在这些地方,某个命名空间中的名字可以被直接引用。这个作用域就是这个命名空间的作用域。
python中的作用域分4种情况:
L:local,局部作用域,即函数中定义的变量;E:enclosing,嵌套的父级函数的局部作用域,即包含此函数的上级函数的局部作用域,但不是全局的;G:globa,全局变量,就是模块级别定义的变量;B:built-in,系统固定模块里面的变量,比如int, bytearray等搜索变量的优先级顺序
局部作用域>外层作用域>当前模块中的全局>python内置作用域,也就是L>E>G>B。
B = str("B:built-in 内置作用域")G = "G:globa,全局变量,就是模块级别定义的变量"print(B) # 当前模块中的全局>python内置作用域 找Bprint(G) # 当前模块中的全局 找Gprint(E) # 找不到Eprint(L) # 找不到Ldef f(): E = "E:enclosing,嵌套的父级函数的局部作用域" print(B) # 外层作用域>当前模块中的全局>python内置作用域 找B print(G) # 外层作用域>当前模块中的全局 找G print(E) # 外层作用域 找E print(L) # 找不到L def z (): L = "L:local,局部作用域,即函数中定义的变量" print(B) # 作用域局部>外层作用域>当前模块中的全局>python内置作用域 找B print(G) # 作用域局部>外层作用域>当前模块中的全局 找G print(E) # 作用域局部>外层作用域 找E print(L) # 作用域局部 找L
注意:在Python中,只有模块(module),类(class)以及函数(def、lambda)才会引入新的作用域,其它的代码块(如if、try、for等)是不会引入新的作用域的
变量的修改
在“作用域局部>外层作用域>当前模块中的全局>python内置作用域”中,更内层的作用域不可直接修改外层的作用域的变量,要修改要用到global关键字 和 nonlocal关键字
global关键字
当修改的变量是在全局作用域(global作用域)上的,就要使用global先声明一下。
nonlocal关键字
global关键字声明的变量必须在全局作用域上,不能嵌套作用域上,当要修改嵌套作用域(enclosing作用域,外层非全局作用域)就需要nonlocal关键字了
B = str("B:built-in 内置作用域")G = "G:globa,全局变量,就是模块级别定义的变量"def f(): E = "E:enclosing,嵌套的父级函数的局部作用域" def z (): L = "L:local,局部作用域,即函数中定义的变量" global B B = "修改全局作用域的变量" nonlocal E E = "修改嵌套作用域的变量"
欢迎评论,番茄,鸡蛋都砸过来吧!!!
相关产品
-
京华时报讯(记者高宇飞)6月2日,第16届中国电影华表奖主办方公布提名名单,2014-2015年度28部优秀影片突围,包括《狼图腾》《捉妖记》《破风》《解救吾先生》《天将雄师》等片。刘德华、张涵予两人将角逐优秀男演员奖,巩俐、白百何两人将角逐优秀女演员奖。
-
因《七月与安生》马思纯和周冬雨双双获得影后,这也是金马史上首次出现双影后局面。金马执委会给出的解释是“缺一不可、珠联璧合”。昨日京华时报记者第一时间专访到新晋影后马思纯,她笑说这次没想过得奖,“因为对手都非常强大,我觉得即使是我们《七月与安生》可以有这个幸运,应该也是冬雨,因为的确她的角色更出彩,没有想到会有双黄蛋。我觉得特别幸运。”
-
众所周知,过去几年,央行就已开始运用“调整首付比例”、“专门针对房贷利率”等结构性政策来调控房价,周小川表示,“这些措施未来还会继续使用,有的还会继续加大一定力度”。
-
工业机器人制造者、数字化智能高端装备制造的高科技上市企业中科新松向本次AI加速营提供两个需求“命题”,创业团队将有机会直接获得来自新松机器人的订单:
-
那么在这两方面,特斯拉都做了什么?对于汽车产业,特斯拉已经推出了MODEL S、MODEL X两款车型(Roadster已经停产),入门级的MODEL 3也会在今年正式投入量产。未来,特斯拉还将推出紧凑型SUV、皮卡、中型卡车和高载客密度的城市交通工具。特斯拉的产品除了纯电动这一属性,“自动驾驶”功能也是其一大特色,目前特斯拉新生产的车型都已经开始搭载可支持全自动驾驶的硬件,这在全球只此一家。
-
与会专家深入讨论了介尺度科学的概念、科学问题及相关领域发展趋势,建议有关方面关注和支持介尺度前沿科学研究,推动学科交叉研究,拓展并提升我国在介尺度科学的研究能力和水平。
-
这次推出的2015款胜达是该车型自2012年上市以来的首次大改款,主要变化集中在车型阵营优化和价格下调两个方面。从车型阵营来看,全新胜达新增的2.0T车型均为5座版,3款5座车型加上原有的2款7座车型,更多满足消费者对T动力车型的需求。增加车型的同时,新车价格也进行了重新调整,原有2.0T顶配车型的售价降低到28.98万元,这意味着调整后的全新胜达5款2.0T车型售价全部集中在20万-30万元的区间。
-
地震发生后,新疆地震应急指挥部决定派出库尔勒地震台和巴州地震局组成联合地震应急现场工作队,即刻出发,前往震中区。
热点资讯
- 《幻想全明星》C.C新皮肤“万圣节魔女”明日上线2019-11-27
- 高级灰,你也过国庆啊?2019-11-18
- 消息称LG将获得苹果最高500万块OLED手机屏幕订单2019-06-26
- 机器学习:双聚类算法2019-11-23
- 法院:明亮奶盒配85不侵犯合理使用温度标识|侵犯新浪财经2019-06-26
- 山东省菏泽市取消新房转让限制措施2019-11-28
- 酷包酷玩8手机明天:999元,C型接口4000mAh电池2019-11-22
- 阅文集团将以不超过155亿元人民币的价格收购新丽传媒2019-06-26