在编写Python 3代码时,我通过在变量名中使用Unicode文字来让自己高兴。今天我有一个奇怪的错误,原因是Python没有区分变量ρ
和ϱ
,因为这个简短的代码显示:
ρ = 'hello'
ϱ = 'goodbye'
print(ρ) # Prints 'goodbye'
这是一个错误还是一个功能?在后者的情况下,我如何/在哪里可以找到以这种方式属于一起的所有这些字符的集合?
在字符串中使用ρ
和ϱ
时,不存在这种区别:
a = 'ρ'
b = 'ϱ'
print(a == b) # Prints False
这使我确信这不是编辑器/终端的编码问题。
我们还可以使用unicodedata
模块确认Python完全了解我们正在处理哪些字符:
import unicodedata
print(unicodedata.name('ρ')) # Prints 'GREEK SMALL LETTER RHO'
print(unicodedata.name('ϱ')) # Prints 'GREEK RHO SYMBOL'
我在φ
对(GREEK SMALL LETTER PHI)和ϕ
(GREEK PHI SYMBOL)之间发现了相同的行为。
答案 0 :(得分:3)
2.3. Identifiers and keywords ¶
解析时,所有标识符都转换为正常格式NFKC;标识符的比较基于NFKC。
>>> unicodedata.normalize('NFKC', 'ρϱ')
'ρρ'