Python 中標識符(例如變量名)的有效和無效名稱和命名約定

商業

在 Python 中,需要根據規則定義標識符(變量名、函數名、類名等)。不符合規則的名稱不能用作標識符,會導致錯誤。

此處提供以下信息。

  • 可以和不能在標識符(名稱)中使用的字符
    • ASCII 字符
    • Unicode 字符
      • 歸一化(例如在數學中)
  • 檢查字符串是否為有效標識符:isidentifier()
  • 不能用作標識符的詞(名稱)(保留詞)
  • 不應用作標識符(名稱)的詞
  • PEP8 的命名約定

以下說明在 Python 3 中給出,在 Python 2 中可能有所不同。

可以和不能在標識符(名稱)中使用的字符

表示可以和不能用作標識符(名稱)的字符。

另外,雖然有很多東西要寫,但基本上你只需要記住以下幾點。

  • 使用大寫和小寫字母、數字和下劃線。
  • 第一個(第一個)字母不能是數字。

ASCII 字符

可用作標識符(名稱)的 ASCII 字符有大寫和小寫字母(A~Z、a~z)、數字(0~9)和下劃線(_)。字母表區分大小寫。

AbcDef_123 = 100
print(AbcDef_123)
# 100

不能使用下劃線以外的符號。

# AbcDef-123 = 100
# SyntaxError: can't assign to operator

此外,不能在開頭(第一個字母)使用數字。

# 1_abc = 100
# SyntaxError: invalid token

也可以在開頭使用下劃線。

_abc = 100
print(_abc)
# 100

但是,請注意開頭的下劃線可能具有特殊含義。

Unicode 字符

從 Python 3 開始,也可以使用 Unicode 字符。

変数1 = 100
print(変数1)
# 100

並非所有 Unicode 字符都可以使用,並且根據 Unicode 類別,有些字符無法使用。例如,不能使用標點符號和象形圖等符號。

# 変数。 = 100
# SyntaxError: invalid character in identifier

# ☺ = 100
# SyntaxError: invalid character in identifier

可以使用的 Unicode 類別代碼請參閱官方文檔。

在很多情況下,使用漢字等並沒有什麼優勢,僅僅是因為Unicode字符也可以使用(不會出錯)。

歸一化(例如在數學中)

Unicode 字符被轉換為規範化形式 NFKC 以進行解釋。例如,全角字母轉換為半角字母(ASCII 字符)。

請注意,即使源代碼顯示不同的顯示,它也被視為相同的對象並將被覆蓋。

ABC = 100
ABC = -100

print(ABC)
# -100

print(ABC)
# -100

print(ABC is ABC)
# True

檢查字符串是否為有效標識符:isidentifier()

可以使用字符串方法 isidentifier() 來檢查字符串作為標識符是否有效。

如果作為標識符有效,則返回 true,如果無效則返回 false。

print('AbcDef_123'.isidentifier())
# True

print('AbcDef-123'.isidentifier())
# False

print('変数1'.isidentifier())
# True

print('☺'.isidentifier())
# False

不能用作標識符的詞(名稱)(保留詞)

有一些詞(保留詞)不能用作標識符,即使它們是作為標識符(名稱)的有效字符串。

由於保留字是作為標識符的有效字符串,因此 isidentifier() 返回 true,但如果將其用作標識符,則會發生錯誤。

print('None'.isidentifier())
# True

# None = 100
# SyntaxError: can't assign to keyword

要獲取保留字列表並檢查字符串是否為保留字,請使用標準庫的關鍵字模塊。

不應用作標識符(名稱)的詞

例如,Python 內置函數的名稱可以用作標識符,因此您可以將新值作為變量分配給它們。

例如,len() 是一個內置函數,它返回列表中的元素數或字符串中的字符數。

print(len)
# <built-in function len>

print(len('abc'))
# 3

如果您為此名稱 len 分配一個新值,則原始函數將被覆蓋並變得無法使用。請注意,分配新值時不會打印錯誤或警告。

print(len('abc'))
# 3

len = 100
print(len)
# 100

# print(len('abc'))
# TypeError: 'int' object is not callable

另一個常見的錯誤是使用 list = [0, 1, 2],這使得 list() 無法使用。當心。

PEP8 的命名約定

PEP 代表 Python Enhancement Proposal,這是一份描述 Python 的新特性和其他方面的文檔。

PEP stands for Python Enhancement Proposal. A PEP is a design document providing information to the Python community, or describing a new feature for Python or its processes or environment.
PEP 1 — PEP Purpose and Guidelines | Python.org

PEP8是第八個,它描述了“Python代碼的風格指南”,即Python的風格指南。

還提到了命名約定。

有關更多詳細信息,請參閱上面的鏈接,但例如,建議使用以下寫作風格。

  • 模塊
    • lowercase_underscore
    • 小寫+下劃線
  • 包裹
    • lowercase
    • 所有小寫字母
  • 類、異常
    • CapitalizedWords(CamelCase)
    • 單詞首字母大寫,無下劃線
  • 函數、變量和方法
    • lowercase_underscore
    • 小寫+下劃線
  • 持續的
    • ALL_CAPS
    • 大寫字母 + 下劃線

但是,如果您的組織沒有自己的命名約定,則建議遵循 PEP8。