Python變數命名規則(超級詳細)

2020-07-16 10:04:42
Python 需要使用識別符號給變數命名,其實識別符號就是用於給程式中變數、類、方法命名的符號(簡單來說,識別符號就是合法的名字)。

Python 語言的識別符號必須以字母、下畫線(_)開頭,後面可以跟任意數目的字母、數位和下畫線(_)。此處的字母並不局限於 26 個英文字母,可以包含中文字元、日文字元等。

由於 Python 3 支援 UTF-8 字元集,因此 Python 3 的識別符號可以使用 UTF-8 所能表示的多種語言的字元。Python 語言是區分大小寫的,因此 abc 和 Abc 是兩個不同的識別符號。

Python 2.x 對中文支援較差,如果要在 Python 2.x 程式中使用中文字元或中文變數,則需要在 Python 源程式的第一行增加“#coding:utf-8”,當然別忘了將原始檔儲存為 UTF-8 字元集。

在使用識別符號時,需要注意如下規則:
  1. 識別符號可以由字母、數位、下畫線(_)組成,其中數位不能打頭。
  2. 識別符號不能是 Python 關鍵字,但可以包含關鍵字。
  3. 識別符號不能包含空格。

例如下面變數,有些是合法的,有些是不合法的:
  • abc_xyz:合法。
  • HelloWorld:合法。
  • abc:合法。
  • xyz#abc:不合法,識別符號中不允許出現“#”號。
  • abc1:合法。
  • 1abc:不合法,識別符號不允許數位開頭。

Python 的關鍵字和內建函數

Python 還包含一系列關鍵字和內建函數,一般也不建議使用它們作為變數名:
  • 如果開發者嘗試使用關鍵字作為變數名,Python 直譯器會報錯。
  • 如果開發者使用內建函數的名字作為變數名,Python 直譯器倒不會報錯,只是該內建函數就被這個變數覆蓋了,該內建函數就不能使用了。

Python 包含了如表 1 所示的關鍵字:

表 1 Python 關鍵字
False None True and as
assert  break class continue def
del elif else  except finally
for from global if import
in is lambda nonlocal not
or pass raise return try
while with yield    

實際上 Python 非常方便,開發者可以通過 Python 程式來檢視它所包含的關鍵字。例如,對於如下程式:
#匯入keyword 模組
import keyword
#顯示所有關鍵字
keyword.kwlist
從上面程式碼可以看出,程式只要先匯入 keyword 模組,然後呼叫 keyword.kwlist 即可檢視 Python 包含的所有關鍵字。執行上面程式,可以看到如下輸出結果:

['False','None','True','and','as','assert','break','class','continue','def','del','elif','else','except','finally','for','from','global','if','import','in','is','lambda','nonlocal','not','or','pass','raise','return','try','while','With','yield']

上面這些關鍵字都不能作為變數名。

此外,Python 3 還提供了如表 2 所示的內建函數。

表 2 Python內建函數
abs() all() any() basestring() bin()
bool() bytearray() callable() chr() classmethod()
cmp() compile()  complex() delattr() dict()
dir() divmod() enumerate()  eval() execfile()
file() filter() float()  format() frozenset()
getattr() globals() hasattr() hash() help()
hex() id() input() int()  isinstance()
issubclass() iter() len() list() locals()
long() map()  max() memoryview() min()
next()  object() oct()  open()  ord()
pow() print() property() range() raw_input()
reduce() reload() repr() reversed() zip()
round()  set() setattr() slice() sorted()
staticmethod() str() sum() super() tuple()
type() unichr() unicode()  vars() xrange()
Zip() __import__() apply() buffer() coerce()
intern        

上面這些內建函數的名字也不應該作為識別符號,否則 Python 的內建函數會被覆蓋。

注意:在 Python 2.x 中,print 是關鍵字而不是函數。上面這些內建函數(如 unicode())只是 Python 2.x 的內建函數,為了保證 Python 程式具有更好的相容性,程式也不應該使用這些內建函數的名字作為識別符號。