在变量名中使用时,Python不区分某些unicode字符

时间:2017-01-17 19:29:24

标签: python python-3.x unicode python-unicode

问题

在编写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)之间发现了相同的行为。

1 个答案:

答案 0 :(得分:3)

2.3. Identifiers and keywords ¶

  

解析时,所有标识符都转换为正常格式NFKC;标识符的比较基于NFKC。

>>> unicodedata.normalize('NFKC', 'ρϱ')
'ρρ'