點(diǎn)號(hào)和無(wú)點(diǎn)號(hào)變量名,用不同的處理方式。
(1) 無(wú)點(diǎn)號(hào)的變量名,比如X,使用的是作用域。
(2) 有點(diǎn)號(hào)的變量名,比如obj.X,使用對(duì)象的命名空間。
(3) 模塊和類對(duì)對(duì)象的命名空間進(jìn)行初始化。
1.1 無(wú)點(diǎn)號(hào)變量名
無(wú)點(diǎn)號(hào)變量名遵循LEGB作用域規(guī)則。
1.1.1 賦值本地變量
X = value
賦值語(yǔ)句,使變量名成為本地變量。
1.1.2 引用變量
引用變量X時(shí)根據(jù)LEGB作用規(guī)則搜索變量X:當(dāng)前本地作用域搜索,之后在嵌套的函數(shù)中搜索,然后在全局作用域搜索,最后在內(nèi)置作用域搜索。
1.2 點(diǎn)號(hào)變量名
點(diǎn)號(hào)的變量名是特定對(duì)象的屬性。
1.2.1 命名空間賦值
obj.X = value
在進(jìn)行點(diǎn)號(hào)運(yùn)算的對(duì)象obj的命名空間內(nèi)創(chuàng)建或修改屬性名X。
1.2.2 引用點(diǎn)號(hào)變量
obj.X
類:先在對(duì)象內(nèi)搜索變量名X,然后在可讀取的超類上使用繼承搜索變量名X。
模塊:直接從模塊讀取X。
1.3 python變量名分類
python變量賦值位置決定了變量的作用域或命名空間,即變量可訪問(wèn)范圍。
| NO | 賦值位置 | 分類 | 描述 | 
|---|---|---|---|
| 1 | 模塊頂層賦值 | 全局變量 | 都可訪問(wèn) | 
| 2 | 函數(shù)內(nèi)部賦值 | 本地變量 | 函數(shù)內(nèi)部可訪問(wèn) | 
| 3 | 方法內(nèi)部賦值 | 本地變量 | 方法內(nèi)部可訪問(wèn) | 
| 4 | 類主體內(nèi)賦值 | 類數(shù)據(jù)屬性 | 類、實(shí)例和行為可訪問(wèn) | 
| 5 | 方法self賦值 | 實(shí)例屬性 | 實(shí)例可訪問(wèn) | 
1.3.1 模塊內(nèi)訪問(wèn)變量
# vars.py
# 模塊屬性
X = 91
def f1():
   print(X)
   
def f2():
   # 函數(shù)本地變量
   X = 92
   print(X)
   
class C1(object):
   # 類屬性
   X = 93
   def m1(self):
       # 方法本地變量
       X = 94
       # 實(shí)例屬性
       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:
       # 函數(shù)外不可訪問(wèn)本地變量
       print(f2.X)
   except Exception as e:
       print('f2.X={}'.format(e))
   
   try:
       # 方法外不可訪問(wèn)本地變量
       print(C1.m.X)
   except Exception as e:
       print('C1.m.X={}'.format(e))
       
''' 運(yùn)行結(jié)果
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 模塊外訪問(wèn)變量
>>> 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語(yǔ)句用于def函數(shù)內(nèi)定義全局變量。在函數(shù)外也可以引用此變量。
python中如果要修改嵌套作用域變量的值,就用nonlocal語(yǔ)句。
>>> 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
- 
                                函數(shù)
                                +關(guān)注
關(guān)注
3文章
4403瀏覽量
66599 - 
                                python
                                +關(guān)注
關(guān)注
56文章
4850瀏覽量
89309 
發(fā)布評(píng)論請(qǐng)先 登錄
就是一個(gè)文件下的兩個(gè)文件夾里的全局變量名一樣。。。在
keil 4.7仿真,Watch窗口不能保存住變量名
Makefile——$(變量名)
關(guān)于C6678調(diào)試——變量名解析的問(wèn)題
請(qǐng)問(wèn)STM32頭文件里宏定義名和變量名是不是重復(fù)了?
請(qǐng)問(wèn)21489的引腳變量名在哪里找?
阿里巴巴禁止開(kāi)發(fā)人員使用isSuccess作為變量名的原因是什么
請(qǐng)問(wèn)21489的引腳變量名在哪里找?
Python私有變量的定義方法
Python公認(rèn)的命名規(guī)則總結(jié)
90條關(guān)于寫Python 程序的建議
C51 單片機(jī)的 C 語(yǔ)言中的變量定義與硬件之間的關(guān)系
    
          
        
        
python變量名解析
                
 
           
            
            
                
            
評(píng)論