在Python中,一切都是對象,包括常量數據類型,如整數數據類型(1,2,3...),字符串數據類型("ABC")。想要使用這些對象,就要使用它的對象引用。賦值操做符,其實是使得對象引用對內存中存放數據的對象進行引用。html
那什麼是標識符?標識符是對對象引用起的一個名字。
有效的Python標識符規則:
(1)長度任意長;
(2)標識符不能與關鍵字同名;
(3)在2.x版本的Python中,標識符以ASCII的字母或下劃線開始,後面能夠接字母、數字、下劃線;在3.x的Python中,標識符ASCII字母、下劃線以及大多數非英文語言的字母,只要是Unicode編碼的字母均可以充當引導字符,後續字符能夠是任意引導符,或任意非空格字符,包括Unicode編碼中認爲是數字的任意字符。(所以
可使用阿拉伯語、中文、日語或俄語字符或Unicode字符集支持的任意其餘語言中的字符進行命名)
約定:
(1)不要使用Python預約義的標識符名,所以要避免使用NotImplemented與Eliiipsis等名字,這些在將來有可能被Python的新版本使用到;
(2)不要使用Python內置函數名或內置數據類型或異常名做爲標識符名;
(3)關於下劃線的約定,名字的開頭和結尾都使用下劃線的狀況應該避免,由於Python中大量採用這種名字定義了各類特殊方法和變量;在有些狀況,以一個或兩個下劃線引導的名稱,可是沒有使用兩個下劃線結尾的應該特殊對待。
舉例:
上面的語句是合法的,可是它將與math數據類型綁定的對象引用從新與int數據類型對象綁定,那麼將不能正常使用math數據類型的屬性了。
#合法
a123_=2
_a123=2
我=2 #中文
α=2 #希臘字母
#不合法的標識符名
a-b=2 #由於包含了減法操做符,'-'不是一個Unicode字母、數字、下劃線,不能將2賦值給操做符
2miles=2 #不能數字開頭
I'm=2 #單引號不是一個Unicode字母、數字或下劃線
關於下劃線還有一點想說的:
單一的下劃線能夠做爲一個標識符,在交互解釋器或Python Shell內部,下劃線實際上存放了最後一個被評估的表達式的結果。在一般運行的程序中,使用下劃線和其餘普通標識符同樣,須要本身預先定義,非系統佔有。
在不關心迭代針對的數據項是,有些程序員喜歡在for...in..中使用_,如:
#沒有使用到迭代的數據項
for _ in (0,1,2,3,4,5):
print("Hello")
另外要注意一點,一些編寫國際化程序的程序員通常會使用_做爲其翻譯函數的名稱。這些程序員通常不使用gettext("translate me"),而是使用_("translate me")。
當變量是私有的時候,用_xxx 來表示變量是很好的習慣。
在類中,
「單下劃線」 開始的成員變量叫作保護變量,意思是隻有類對象和子類對象本身能訪問到這些變量
,需經過類提供的接口進行訪問,不能用「from xxx import *」而導入
;
「雙下劃線」 開始的是
類的
私有成員,意思是隻有類對象本身能訪問,連子類對象也不能訪問到這個數據。
以雙下劃線開頭和結尾的(__foo__)表明python裏特殊方法專用的標識,如 __init__()表明類的構造函數。
參考:
《Python 3 程序開發指南》
(第二版)
本文連接: