這是現在一個老問題,但我想添加一個關於如何在Python 3中執行此操作的答案,因爲我已經完成了一個實現。
允許的字符記錄在這裏:https://docs.python.org/3/reference/lexical_analysis.html#identifiers。它們包含相當多的特殊字符,包括標點符號,下劃線和整個外國字符。幸運的是unicodedata
模塊可以提供幫助。下面是我的實現直接實現的Python文檔說什麼:
import unicodedata
def is_valid_name(name):
if not _is_id_start(name[0]):
return False
for character in name[1:]:
if not _is_id_continue(character):
return False
return True #All characters are allowed.
_allowed_id_continue_categories = {"Ll", "Lm", "Lo", "Lt", "Lu", "Mc", "Mn", "Nd", "Nl", "Pc"}
_allowed_id_continue_characters = {"_", "\u00B7", "\u0387", "\u1369", "\u136A", "\u136B", "\u136C", "\u136D", "\u136E", "\u136F", "\u1370", "\u1371", "\u19DA", "\u2118", "\u212E", "\u309B", "\u309C"}
_allowed_id_start_categories = {"Ll", "Lm", "Lo", "Lt", "Lu", "Nl"}
_allowed_id_start_characters = {"_", "\u2118", "\u212E", "\u309B", "\u309C"}
def _is_id_start(character):
return unicodedata.category(character) in _allowed_id_start_categories or character in _allowed_id_start_categories or unicodedata.category(unicodedata.normalize("NFKC", character)) in _allowed_id_start_categories or unicodedata.normalize("NFKC", character) in _allowed_id_start_characters
def _is_id_continue(character):
return unicodedata.category(character) in _allowed_id_continue_categories or character in _allowed_id_continue_characters or unicodedata.category(unicodedata.normalize("NFKC", character)) in _allowed_id_continue_categories or unicodedata.normalize("NFKC", character) in _allowed_id_continue_characters
此代碼是從這裏適於在CC0:https://github.com/Ghostkeeper/Luna/blob/d69624cd0dd5648aec2139054fae4d45b634da7e/plugins/data/enumerated/enumerated_type.py#L91。它已經過很好的測試。
而投票的原因是......?這是一個基本問題,但仍是一個有效的問題:+1。 – EOL 2012-04-12 08:54:17
試圖創建一個名爲'None'或'__debug__'的類是做什麼的?根據以下文檔,我期望它會引發'SyntaxError':https://docs.python.org/2/library/constants.html – ArtOfWarfare 2015-02-23 17:27:36