python:LEGB标识符解析顺序
""" LEGB查询规则: L locals 局部变量,当前所在命名空间(如函数,模块等) 注意,包括函数的参数(形参) E Enclosing Function 闭包空间(外部嵌套函数的命名空间) G Globals 全局变量,某个python模块的命名空间 B Builtins python内建模块的命名空间 """ key='Hello'#模块全局 def test(): print(key)#全局,输出:Hello def test2(key): print(key,end='***')#局部(形参),输出 key参数传入的值 key=key+str(512) print(key) def test3(): #print(key) """ 这里↑遵循LEGB规则解析标识符key的时候, 在函数locals中发现了key=1024 key不再当作全局变量解析,所以打开注释后这里会报错: local variable 'key' referenced before assignment """ key=1024#注意和前面的test函数比较 print(key) def test4(): global key #若要在模块内的某个函数里面修改模块全局变量,一定要有global关键字 key=1024 if __name__ == '__main__': test() test2('hi') test3() test4() test()
运行结果:
Hello hi***hi512 1024 1024 Process finished with exit code 0
这个问题使用pycharm编程时候,编辑器是可以用高亮给你提示出来的......So,有个好的IDE真实省心省力啊O(∩_∩)O
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
python:小心类实例的属性动态绑定机制
class Test: def __init__(self): self.__key='init' def get_key(self): return self.__key def set_key(self,key): self.__key=key if __name__ == '__main__': obj = Test() print(obj.get_key())#输出初始值init obj.set_key('通过set方法设置的值') print(obj.get_key())#输出set方法修改之后的值 obj.__key = 'Should not use in this way'#动态绑定上去的属性 print(obj.get_key())#类的实例私有属性的值 print(obj.__key) #注意这个地方↑其实输出的是动态绑定到实例obj上面的属性,不是类里面的私有属性!
- 下一篇
python:get和set
java里面有一件事情很让人崩溃,就是通过类里面的public函数访问类的私有属性对外提供接口,从数据库里面读出来的字段包装成对象之后,最重要的一件事情就是赶紧把字段做成private的,然后开始写public的get和set方法。这个过程很麻烦,但是却很重要,小小的一对儿函数给程序员提供了无限的可能(这里可以来脑补一个程序员大战黑产的惨烈故事...),然而,这种东西也确实很烦人,假如你反射了一个有几十个字段做属性的对象,这一堆get和set可是着实叫人抓狂,有些IDE甚至提供了自动生成get/set方法的功能(比如eclipse家族)。。。 那么python里面要怎样处理这种情况呢? 先来看看最土的办法: class Test: def __init__(self): self.__key='init' def get_key(self): return self.__key def set_key(self,key): self.__key=key 看起来跟java没什么两样嘛...... 然后注意,我要变型了: class Student(): def __init__(self...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Hadoop3单机部署,实现最简伪集群
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2全家桶,快速入门学习开发网站教程
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Docker安装Oracle12C,快速搭建Oracle学习环境