点号和无点号变量名,用不同的处理方式。
(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
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
函数
+关注
关注
3文章
4329浏览量
62583 -
python
+关注
关注
56文章
4795浏览量
84647
发布评论请先 登录
相关推荐
就是一个文件下的两个文件夹里的全局变量名一样。。。在
就是一个文件下的两个文件夹里的全局变量名一样。。。在打开一个时总是从另外一个文件夹里调用全局变量waring。。。请问该怎么解决
发表于 11-12 20:41
keil 4.7仿真,Watch窗口不能保存住变量名
我用的STM32F303的单片机,仿真器是ULink2,每次仿真的变量名存到watch窗口后,可以正常观察到变量值,但是退出仿真再次进入后,变量都消失了,请教大家,这是怎么回事?如何才能是变量
发表于 04-01 17:30
Makefile——$(变量名)
$(变量名) 表示的是此变量的值,如$(object)表示的是变量object的值;举个例子:objects = main.o kbd.o command.o display.o edit : $(objects)等价于 edi
发表于 03-08 17:02
关于C6678调试——变量名解析的问题
TI 专家:
在使用C6678上EVM板调试时,尝试编写一个在PC上运行的程序(或者函数)使得输入DSP中的一个全局变量名能返回这个全局变量的地址。就类似于调试工具中的view->
发表于 06-21 17:58
请问STM32头文件里宏定义名和变量名是不是重复了?
比如在 stm32f10x_map.h 头文件里,有下面这样宏定义名和指针变量名相同的:这里是宏定义#ifdef _PWR#define PWR((PWR_TypeDef *) PWR_BASE
发表于 09-04 09:28
Python私有变量的定义方法
在类内部使用,不被外部调用,且当变量被标记为私有后,调用时需再变量的前端插入类名,在类名前添加一个下划线,即“_ClassName__变量名
发表于 02-13 16:49
•1666次阅读
C51 单片机的 C 语言中的变量定义与硬件之间的关系
C51 语言的变量定义定义方式:普通变量:(修饰符)数据类型 [存储类型] 变量名 [= 值]指针变量: (修饰符)所指向的地址的数据类型 [所指向的地址的存储类型] *[指针的存储类
发表于 11-23 16:51
•3次下载
python私有变量和私有方法
python私有变量和私有方法 1. 下划线妙用 在 Python 中,下划线可是非常推荐使用的符号: 变量名推荐使用下划线分隔的蛇形命名法 魔法方法、构造函数都需要使用双下划线 对于
怎么快速进行变量和函数的命名?
enum(枚举)类型,前缀使用“e”+枚举变量名,其成员前缀为枚举变量或者其缩写;struct(结构体)类型,前缀使用“s”+结构体变量名,其成员和变量定义规则相同;union(联合)
发表于 08-18 10:30
•355次阅读
评论