點號和無點號變量名,用不同的處理方式。
(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文章
4346瀏覽量
62972 -
python
+關注
關注
56文章
4807瀏覽量
85038
發布評論請先 登錄
相關推薦
就是一個文件下的兩個文件夾里的全局變量名一樣。。。在
就是一個文件下的兩個文件夾里的全局變量名一樣。。。在打開一個時總是從另外一個文件夾里調用全局變量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
?1689次閱讀
C51 單片機的 C 語言中的變量定義與硬件之間的關系
C51 語言的變量定義定義方式:普通變量:(修飾符)數據類型 [存儲類型] 變量名 [= 值]指針變量: (修飾符)所指向的地址的數據類型 [所指向的地址的存儲類型] *[指針的存儲類
發表于 11-23 16:51
?3次下載
python私有變量和私有方法
python私有變量和私有方法 1. 下劃線妙用 在 Python 中,下劃線可是非常推薦使用的符號: 變量名推薦使用下劃線分隔的蛇形命名法 魔法方法、構造函數都需要使用雙下劃線 對于
怎么快速進行變量和函數的命名?
enum(枚舉)類型,前綴使用“e”+枚舉變量名,其成員前綴為枚舉變量或者其縮寫;struct(結構體)類型,前綴使用“s”+結構體變量名,其成員和變量定義規則相同;union(聯合)
發表于 08-18 10:30
?372次閱讀
評論