化异为同,Python 在背后帮你做的转换

简介: 化异为同,Python 在背后帮你做的转换

摄影:产品经理又是产品经理自己去吃的烤肉

我们先来看一段代码,这段代码似乎触发了Python的bug:


>>> 𝑓 = 1>>> f = 2>>> print(𝑓)

运行效果如下图所示:


我们知道,Python 的变量名是可以使用 Unicode 字符的,也就是非英文字母也可以当做变量名,例如:


如果大家仔细观察,就会发现上面的𝑓和英文字母f不是同一个字符。

那为什么当我们给f赋值为2以后,原来𝑓的值也改变了呢?这是因为,Python 会把所有的变量名转换为它的 NFKC 等价形式。

从Python的官方文档2.3. Identifiers and keywords[1]中,我们可以看到:

All identifiers are converted into the normal form NFKC while parsing; comparison of identifiers is based on NFKC.

转换的原理可以参阅维基百科:Unicode equivalence - Wikipedia[2]

Python已经自带了一个转换的模块,叫做unicodedata,通过它,我们可以把非标准的Unicode字符转成标准的Unicode字符,例如:


>>> import unicodedata>>> unicodedata.normalize('NFKC', '𝑓')'f'>>> unicodedata.normalize('NFKC', '𝑓') == 'f'True

可以看到,手写字符𝑓通过 NFKC 标准转换以后,就是普通的字母f,所以在 Python 里面,如果作为变量名,这两个字符是一样的。

除了英文字符外,中文字符也可以转换。大家应该还记得我之前讲康熙字符那篇文章:康熙部首导致的字典查询异常我们可以使用相同的方式,把康熙部首里面的转换为标准的汉字


>>> unicodedata.normalize('NFKC', '⽐') == '比'True

这样一来,如果你需要做一个服务,它接收用户的输入,但你又不想让用户输入这种长得像中文或者英文,但是却又不是的怪异字符,你就可以使用 NFKC 把它转换为标准的字符。例如,把中文逗号转成英文逗号,把中文分号转成英文分号,把中文冒号转成英文冒号等等:

目录
相关文章
|
6月前
|
Python
解释Python中的Metaclasses及其应用场景。
解释Python中的Metaclasses及其应用场景。
48 3
|
1月前
|
大数据 测试技术 数据库
【Python篇】Python 函数综合指南——从基础到高阶
【Python篇】Python 函数综合指南——从基础到高阶
19 2
|
2月前
|
数据挖掘 Python
用python的tushare模块分析股票案例(python3经典编程案例)
该文章提供了使用Python的tushare模块分析股票数据的案例,展示了如何获取股票数据以及进行基本的数据分析。
137 0
|
2月前
|
并行计算 Java API
写出高效率python的90个方法,附案例(python3经典编程案例)
该文章提供了90个提高Python编程效率的方法及案例,旨在帮助开发者编写更加高质量和优化的Python代码。
41 0
|
5月前
|
监控 测试技术 持续交付
Python 3.x与Python 2.x:不兼容性的深度解析
Python 3.x与Python 2.x之间的不兼容性是一个复杂而重要的问题。尽管迁移可能会带来一些挑战和困难,但考虑到Python 2.x已经停止支持以及Python 3.x带来的诸多改进和优势,迁移是不可避免的。通过了解变化、使用兼容工具、逐步迁移、利用社区资源、编写测试、保持更新、考虑使用Python 3.x的特定功能、重新评估第三方库和框架、备份和版本控制以及测试和部署等策略,你可以成功地将你的代码从Python 2.x迁移到Python 3.x,并享受Python 3.x带来的新功能和改进.
651 5
|
5月前
|
Python
几个有深度的 Python 代码
几个有深度的 Python 代码
19 0
|
6月前
|
测试技术 持续交付 数据处理
Python动态类型深度解析与实践
Python动态类型深度解析与实践
463 1
|
6月前
|
机器学习/深度学习 存储 移动开发
Python 字符串深度总结
Python 字符串深度总结
|
6月前
|
机器学习/深度学习 算法 网络协议
python有哪些难点
python有哪些难点
125 0
|
人工智能 Python
Python输出的奥秘
Python输出的奥秘
64 0
下一篇
无影云桌面