这里有两个不同的角色。一个是
MICRO SIGN,这是键盘上的一个,另一个是
GREEK SMALL LETTER MU。
要了解发生了什么,我们应该看看Python如何在language reference中定义标识符:
identifier ::= xid_start xid_continue*
id_start ::=
id_continue ::=
xid_start ::=
xid_continue ::=
我们的两个字符MICRO SIGN和GREEK SMALL LETTER MU都是Ll unicode组(小写字母)的一部分,因此它们都可以在标识符中的任何位置使用。现在请注意,标识符的定义实际上是指xid_start和xid_continue,并且它们被定义为相应的非x定义中的所有字符,其中NFKC归一化导致标识符的有效字符序列。
Python显然只关心标准化的标准化形式。这被确认了一下:
All identifiers are converted into the normal form NFKC while parsing; comparison of identifiers is based on NFKC.
NFKC是一个Unicode normalization,它将字符分解成各个部分。 MICRO SIGN分解为GREEK SMALL LETTER MU,这正是在那里发生的。
还有很多其他角色也受到这种规范化的影响。另一个例子是OHM SIGN,它分解为GREEK CAPITAL LETTER OMEGA.使用它作为标识符给出了类似的结果,这里使用本地显示:
>>>