You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python对象的ϵ属性被静默转为ε是否属于预期行为?

Python中属性名ϵ通过点表达式被转换为ε的现象解析

这个现象是符合预期的,核心原因是Python对标识符的NFKC Unicode归一化处理规则:

  • 使用点表达式(.)创建或访问属性时,Python会自动将标识符转换为NFKC归一化形式。ϵ(U+03F5,希腊字母epsilon变体)在归一化后会被替换为ε(U+03B5,标准希腊字母epsilon),因此你通过a.ϵ = 100实际创建的是名为ε的属性。
  • setattr函数则直接使用传入的原始字符串作为属性名,不会触发自动归一化,因此可以成功创建并保留ϵ作为属性名。

相关文档依据

Python语言参考中关于标识符的定义明确说明:

解析标识符时,会将其转换为NFKC归一化形式。这表示某些视觉上不同的字符会被视为等价的标识符。

验证代码示例

Python 3.12.5 (main, Aug  7 2024, 13:49:14) [GCC 14.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> a = type('',(),{})()
>>> a.ϵ = 100
>>> hasattr(a,'ϵ')
False
>>> hasattr(a,'ε')
True
>>> setattr(a,'ϵ',200)
>>> hasattr(a,'ϵ')
True
>>> a.ϵ
100

内容的提问来源于stack exchange,提问作者Chun-Chung Chen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 14:22:09