python-3.x - Python 如何知道所有这些 π 的变体都是同一个变量名?
问题描述
Unicode 标准中有(至少)3 个希腊字母 pi 的变体,具有不同的代码点。但是,如果我将其中任何一个作为标识符分配给 Python 对象,我也可以使用其他任何一个:
In [1]: π = 3.14
In [2]: print(π) # \u03c0
3.14
In [3]: print() # \U0001d6d1
3.14
In [4]: print() # \U0001d70b
3.14
Python 怎么知道这些名字是一样的?
解决方案
正如原始 PEP3131解释的那样:
所有的标识符在解析的时候都被转换成正常形式的NFKC;标识符的比较基于 NFKC。
这也包含在文档的标识符和关键字部分中。
所以:
In [58]: pis = ["\u03c0", "\U0001d6d1", "\U0001d70b"]
In [59]: pis
Out[59]: ['π', '', '']
In [60]: [ord(pi) for pi in pis]
Out[60]: [960, 120529, 120587]
In [61]: import unicodedata
In [62]: [unicodedata.normalize('NFKC', pi) for pi in pis]
Out[62]: ['π', 'π', 'π']
In [63]: [ord(unicodedata.normalize('NFKC', pi)) for pi in pis]
Out[63]: [960, 960, 960]
推荐阅读
- php - Markdown 邮件和视图:缓存导致错误“/resources/views/vendor/mail/text”目录不存在
- python - X 轴上带有 MultiIndex 的条形图
- microsoft-graph-api - 在网站集应用目录中使用 Web 应用权限
- java - 我的 Libgdx 导出的 .jar 构建未打开
- amazon-web-services - 无法在 aws 公共 IP 中访问此站点
- postgresql - Postgres count(*) 非常慢
- module - MarkLogic 内容泵 (MLCP) 错误 - 无法更新目录 URI 的服务器维护属性
- python - 如何将列表的子字符串转换为一个字符串
- python - Google Colab GPU 不可用(tensorflow 和 keras tf-models 错误)
- kotlin - 多构造函数超类型的 Kotlin 继承