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配置默认Tomcat设置,开启更多高级功能
- SpringBoot2全家桶,快速入门学习开发网站教程
- 设置Eclipse缩进为4个空格,增强代码规范
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- CentOS6,CentOS7官方镜像安装Oracle11G
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Red5直播服务器,属于Java语言的直播服务器
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- SpringBoot2整合Redis,开启缓存,提高访问速度
- MySQL8.0.19开启GTID主从同步CentOS8