在Python中,一切都是對象,包括常量數據類型,如整數數據類型(1,2,3...),字符串數據類型("ABC")。想要使用這些對象,就要使用它的對象引用。賦值操作符,實際上是使得對象引用對內存中存放數據的對象進行引用。
那什么是標識符?標識符是對對象引用起的一個名字。
有效的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=2
>>> math
2
上面的語句是合法的,但是它將與math數據類型綁定的對象引用重新與int數據類型對象綁定,那么將不能正常使用math數據類型的屬性了。
>>> int=2
>>> int
2
和上面的一樣,是合法的但是不提倡。
#合法 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 程序開發指南》
(第二版)
本文鏈接: