यह अब तक एक पुराने सवाल है, लेकिन मैं चाहता हूँ पाइथन 3 में ऐसा करने के तरीके पर एक उत्तर जोड़ने के लिए मैंने एक कार्यान्वयन किया है।
अनुमत वर्ण यहां दस्तावेज़ित हैं: https://docs.python.org/3/reference/lexical_analysis.html#identifiers। उनमें विराम चिह्न, अंडरस्कोर, और पूरी तरह से विदेशी पात्रों सहित कई विशेष पात्र शामिल हैं। सौभाग्य से unicodedata
मॉड्यूल मदद कर सकता है।
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
नाम 'कोई नहीं' या '__debug__' नाम से कक्षा बनाने का प्रयास क्या करता है? निम्नलिखित दस्तावेज़ों के मुताबिक, मैं इसे 'सिंटेक्स त्रुटि' बढ़ाने की अपेक्षा करता हूं: https://docs.python.org/2/library/constants.html – ArtOfWarfare