1 Python 標識符概述(正式介紹)
標識符 (或者叫做 名稱) 由以下詞法定義進行描述。
-
Python 中的標識符語法是基於 Unicode 標准附件 UAX-31,並加入了下文所定義的細化與修改;更多細節還可參見 PEP 3131 。
在 ASCII 范圍內 (U+0001..U+007F),可用於標識符的字符與 Python 2.x 一致: 大寫和小寫字母 A 至 Z,下划線 _ 以及數字 0 至 9,但不可以數字打頭。 -
Python 3.0 引入了 ASCII 范圍以外的額外字符 (見 PEP 3131)。這些字符的分類使用包含於 unicodedata 模塊中的 Unicode 字符數據庫版本。Unicode 4.1 中的所有可用標識符字符列表參見以下非規范 HTML 文件鏈接
https://www.dcl.hpi.uni-potsdam.de/home/loewis/table-3131.html
。 -
標識符的長度沒有限制。對大小寫敏感。
-
所有標識符在解析時會被轉換為規范形式 NFKC;標識符的比較都是基於 NFKC。
2 Python 標識符的簡單理解(非正式介紹)
標識符就是一個名字,它的主要作用就是作為變量、函數、類、模塊以及其他對象的名稱。
就好像我們人一樣,需要起個名字,便於稱呼、指代。
在給標識符命名的時候還要盡量做到“見名知其意”,例如 book_name
我們看到之后,就能大概猜出是“書的名字”相關的內容;user_name
我們看到之后,能大概猜出是“用戶名字”相關的內容等等。
3 Python 標識符命名規則
Python 標識符的命名不是亂來的,而是要遵守一定的命令規則,如下所示:
-
標識符是由字母(A--Z 和 a--z)、下划線和數字組成。如果標識符中出現除了這 3 類字符之外的其他字符,就肯定是不合法標識符。
-
標識符的第一個字符不能是數字。
-
標識符不能和 Python 關鍵字相同。
-
標識符中的字母是嚴格區分大小寫的。
-
以下划線開頭的標識符有特殊含義,除非特定場景需要,應避免使用以下划線開頭的標識符。具體內容請參見本文第 5 小節 保留的標識符類。
-
標識符可以是漢字。但我們應盡量避免使用漢字作為標識符,這會避免遇到很多沒必要的錯誤。
實例如下所示,
(1)合法的標識符:
name
User
user_name
user_age
BOOK
book_name
book13
(2)不合法的標識符:
user&book # & 不屬於標識符的組成字符,即包含非法字符
4name # 不能以數字開頭
and # and是關鍵字,不能作為標識符
(3)標識符中的字母是嚴格區分大小寫的:
也就是說,兩個同樣的單詞,如果大小格式不一樣,就代表不同的標識符。如下所示:
name = '碼農阿傑'
Name = '碼農阿傑'
NAME = '碼農阿傑'
以上三個變量“name”代表不同的標識符,互不影響,相互是獨立的。你明白了嗎?
(4)標識符可以是漢字
# 以漢字作為變量名(標識符)
微信公眾號 = '碼農阿傑'
print(微信公眾號)
運行結果:
碼農阿傑
標識符可以是漢字。但我們應盡量避免使用漢字作為標識符,這會避免遇到很多沒必要的錯誤。
4 Python 標識符的其他命名規則(參考)
標識符的命名,除了要遵守上文所述的幾條規則外,在不同場景中其命名也是有一定規則的,如下所示:
- 函數名、類中屬性名、類中的方法名:全部使用小寫字母,多個字母之間可用下划線
_
分隔,例如user_age
、user
、book_num
等。 - 常量名:全部使用大寫字母,多個字母之間可用下划線
_
分隔,例如DEF_NUMBER
、AGE
、YEAR
等。 - 類名:單詞首字母大寫,例如
User
、Book
、Blog
等。 - 包名:應盡量簡短,全部使用小寫字母,多個字母間可用
.
分隔,例如com.baidu
、com.python
、net.csdn.editor
等。 - 模塊名:應盡量簡短,全部使用小寫字母,多個字母間可用下划線
_
分隔,例如user_login
、game_login
、book_name
等。
5 保留的標識符類
Python 中除了關鍵字之外,還有一些標識符類具有特殊的含義。這些標識符類的命名模式是以下划線字符開頭和結尾,如下所示:
-
_*
以單下划線開頭的標識符。表示不能直接訪問的類屬性,它不會被
from module import *
導入。特殊標識符
_
在交互式解釋器中被用來存放最近一次求值結果;它保存在builtins
模塊中。當不處於交互模式時,_
無特殊含義也沒有預定義。_
作為名稱通常用於連接國際化文本。 -
__*__
以雙下划線開頭和結尾的標識符。系統定義的名稱,是專用標識符。這些名稱由解釋器及其實現 (包括標准庫) 所定義。未來的 Python 版本中還將定義更多此類名稱。
任何不遵循文檔指定方式使用
__*__
名稱的行為都可能導致無警告的出錯。 -
__*
以雙下划線開頭的標識符。類的私有名稱。這種名稱在類定義中使用時,會以一種混合形式重寫以避免在基類及派生類的 "私有" 屬性之間出現名稱沖突。