为什么Python中的math.pi和math.e常量用小写表示?

2 投票
2 回答
1170 浏览
提问于 2025-04-18 14:01

在大多数Python模块中,常量通常是用大写字母书写的,比如:

datetime模块:

  • datetime.MINYEAR
  • datetime.MINYEAR

locale模块:

  • locale.LC_MONETARY
  • locale.LC_TIME
  • locale.DAY_1

os模块:

  • os.PRIO_PGRP
  • os.PRIO_USER

但是在math模块中,只有两个常量是用小写字母书写的:math.pimath.e

如果math模块是一个第三方库,这种情况可能可以解释,但它并不是,它是标准库的一部分。

是的,我知道在Python中并没有真正的常量,但这种书写风格在大多数模块中都是如此,正如PEP 8所说的那样。

那么,为什么这两个常量在Python中不是用大写字母书写的呢?这有什么原因吗?

2 个回答

-2

你可以提个建议,让math.emath.pi有大写的别名。

因为在数学中,e和pi都是小写的,所以我建议用math.LOWERCASE_Emath.LOWERCASE_PI

9

PEP 8 是在2001年7月5日创建的,而这些常量至少在1990年就已经存在了,大家可以在这个初始版本math模块实现中看到。tobias_k在他的评论中做了一个不错的猜测,我认为从数学家的角度来看,使用小写字母似乎更自然。另一个可能的原因是,Python受到了ABC编程语言的强烈影响,在ABC中,pi也是小写的(参考)。

不过,我觉得你说得对,这在目前普遍接受的编码风格规则中确实存在不一致的地方,这种情况不仅在Python中出现。

还要注意,这并不是唯一的不一致,PEP 8还提到threading模块在函数名称方面与指导方针不一致:

混合大小写只在已经是主流风格的上下文中允许(例如,threading.py),以保持向后兼容性。

显而易见,不去修正这个问题的原因是,正如jonrsharpe在他的评论中提到的,PEP 8中也提到过:

特别是:不要为了遵循这个PEP而破坏向后兼容性!

可能添加一些符合指导方针的别名是个好主意,正如OP在下面的评论中提到的那样。

撰写回答