jupyter 笔记本如何解析 unicode 变量名称,为什么会出现错误?



我非常喜欢在jupyter notebook中使用Python的一件事是,我可以使用一些Unicode符号来命名我的变量。例如,要使用希腊字母,我键入alpha后跟制表符,然后得到α

我只是在使用粗体大写字母 T 时遇到了意外行为,bfT后跟制表符,导致𝐓.

实验如下。在单元格内(运行 Python 3(类型:

T = 1
𝐓 = 2
print(T)  # prints 2 

令我惊讶的是,第二行正在重新分配变量T但我希望它与𝐓不同。有人可以解释一下使用 Unicode 有什么好处吗?

我不知道它是否有帮助,但作为另一个实验,我可以看到与字符串相同的两个符号实际上是不同的

'T'.encode('utf8'), '𝐓'.encode('utf8')  # (b'T', b'xf0x9dx90x93')

笔记本如何处理我的变量名称?

此行为在标识符(变量名称(的 python 语言规范中定义。 https://docs.python.org/3/reference/lexical_analysis.html#identifiers

2.3. 标识符和关键字

标识符(也称为名称(由以下词汇定义描述。

Python 中标识符的语法基于 Unicode 标准 附件UAX-31,详细说明和修改定义如下;参见 PEP 3131 了解更多详情。

[...]

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

我们可以确认 T 和 T 在 NFKC 下是等价的,使用标准库 unicodedata 模块。

>>> import unicodedata
>>> unicodedata.normalize('NFKC','𝐓') == 'T'
True

因此,您应该避免在与唯一变量名称相同的范围内使用如此相似的 unicode 字符。

但是仍然有很多 unicode 字符是唯一的,可以安全地用于标识符:

>>> unicodedata.normalize('NFKC','💩λ')
'💩λ'

相关内容

最新更新