当前位置: 首页 > news >正文

python变量名解析总结

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 = 91def f1():print(X)def f2():# 函数本地变量X = 92print(X)class C1(object):# 类属性X = 93def m1(self):# 方法本地变量X = 94# 实例属性self.X = 95if __name__ == '__main__':print(X)    # 91f1()        # 91f2()        # 92print(X)    # 91c = C1()print(c.X)  # 93c.m1()print(c.X)  # 95print(C1.X) # 93try:# 函数外不可访问本地变量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 SS = 'tyxt'>>> g1()
梯阅线条
>>> g2()
>>> print(S)
tyxt>>> def n1():S = 9555def n11():print(S)return n11>>> n1()()
9555
>>> def n2():S = 9555def n21():nonlocal Sprint(S)S = 9666print(S)return n21>>> n2()()
9555
9666
http://www.lryc.cn/news/235243.html

相关文章:

  • 端口号大揭秘:网络世界的“门牌号”有多牛?
  • vue解除数据双向绑定
  • 组件插槽,生命周期,轮播图组件的封装,自定义指令的封装等详解以及axios的卖座案例
  • 小美的树上染色
  • 1.rk3588的yolov5运行:pt_onnx_rknn转换及rknn在rk3588系统python运行
  • 适用于全部安卓手机的 5 大免费 Android 数据恢复
  • 【案例分享】BenchmarkSQL 5.0 压测 openGauss 5.0.0
  • Linux之 4 种休眠模式
  • homeassiant主题
  • 《2020年最新面经》—字节跳动Java社招面试题
  • 2.3IP详解及配置
  • Python程序打包指南:手把手教你一步步完成
  • Linux yum 使用时提示 获取 GPG 密钥失败Couldn‘t open file RPM-GPG-KEY-EPEL-7
  • OpenGL_Learn13(材质)
  • buildadmin+tp8表格操作(1)----表头上方添加按钮和自定义按钮
  • MySQL 定时计划任务 事件的使用
  • C++构造函数 拷贝构造函数 括号法显示法隐式转换法实现类
  • FreeRTOS中的内存分配策略
  • HP惠普光影精灵7笔记本Victus by HP 16.1英寸游戏本16-d0000原装出厂Windows11.21H2预装OEM系统
  • 组合模式 rust和java的实现
  • 大数据基础设施搭建 - MySQL
  • 二叉树递归遍历
  • 【ArcGIS Pro二次开发】:CC工具箱1.1.1更新_免费_安装即可用
  • Dubbo的优雅下线原理分析
  • leetcode做题笔记2342. 数位和相等数对的最大和
  • c# YOLOV5目标检测部署
  • 学习笔记6——垃圾回收
  • 3.1 Windows驱动开发:内核远程堆分配与销毁
  • C++: 模板初阶
  • 人工智能基础_机器学习036_多项式回归升维实战3_使用线性回归模型_对天猫双十一销量数据进行预测_拟合---人工智能工作笔记0076