暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

python变量名解析总结

原创 梯阅线条 2023-11-25
230

1 python变量名解析总结

点号和无点号变量名,用不同的处理方式。

(1) 无点号的变量名,比如X,使用的是作用域。

(2) 有点号的变量名,比如obj.X,使用对象的命名空间。

(3) 模块和类对对象的命名空间进行初始化。

1.1 无点号变量名

无点号变量名遵循LEGB作用域规则。

1.1.1 赋值本地变量

X = value

赋值语句,使变量名成为本地变量。

1.1.2 引用变量

引用变量X时根据LEGB作用规则搜索变量X:当前本地作用域搜索,之后在嵌套的函数中搜索,然后在全局作用域搜索,最后在内置作用域搜索。

1.2 点号变量名

点号的变量名是特定对象的属性。

1.2.1 命名空间赋值

obj.X = value

在进行点号运算的对象obj的命名空间内创建或修改属性名X。

1.2.2 引用点号变量

obj.X

类:先在对象内搜索变量名X,然后在可读取的超类上使用继承搜索变量名X。

模块:直接从模块读取X。

1.3 python变量名分类

python变量赋值位置决定了变量的作用域或命名空间,即变量可访问范围。

NO 赋值位置 分类 描述
1 模块顶层赋值 全局变量 都可访问
2 函数内部赋值 本地变量 函数内部可访问
3 方法内部赋值 本地变量 方法内部可访问
4 类主体内赋值 类数据属性 类、实例和行为可访问
5 方法self赋值 实例属性 实例可访问

1.3.1 模块内访问变量

# vars.py # 模块属性 X = 91 def f1(): print(X) def f2(): # 函数本地变量 X = 92 print(X) class C1(object): # 类属性 X = 93 def m1(self): # 方法本地变量 X = 94 # 实例属性 self.X = 95 if __name__ == '__main__': print(X) # 91 f1() # 91 f2() # 92 print(X) # 91 c = C1() print(c.X) # 93 c.m1() print(c.X) # 95 print(C1.X) # 93 try: # 函数外不可访问本地变量 print(f2.X) except Exception as e: print('f2.X={}'.format(e)) try: # 方法外不可访问本地变量 print(C1.m.X) except Exception as e: print('C1.m.X={}'.format(e)) ''' 运行结果 E:\documents\F盘>python vars.py 91 91 92 91 93 95 93 f2.X='function' object has no attribute 'X' C1.m.X=type object 'C1' has no attribute 'm' '''

1.3.2 模块外访问变量

>>> import os >>> os.chdir(r'E:\documents\F盘') >>> import vars >>> X = 96 >>> print(X) 96 >>> print(vars.X) 91 >>> vars.f1() 91 >>> vars.f2() 92 >>> print(vars.C1.X) 93 >>> c = vars.C1() >>> print(c.X) 93 >>> c.m1() >>> print(c.X) 95

1.3.3 global和nonlocal变量

python的global语句用于def函数内定义全局变量。在函数外也可以引用此变量。

python中如果要修改嵌套作用域变量的值,就用nonlocal语句。

>>> S = '梯阅线条' >>> def g1(): print(S) >>> def g2(): global S S = 'tyxt' >>> g1() 梯阅线条 >>> g2() >>> print(S) tyxt >>> def n1(): S = 9555 def n11(): print(S) return n11 >>> n1()() 9555 >>> def n2(): S = 9555 def n21(): nonlocal S print(S) S = 9666 print(S) return n21 >>> n2()() 9555 9666

本文首发微信公众号:梯阅线条

更多内容参考python知识分享或软件测试开发目录。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论