检测从 Python Int 到(无限)Long 的隐式转换

Detecting Implicit Transition From Python Int To (Unlimited) Long

Python2 Docs On Numeric Types 指出

Plain integers (also just called integers) are implemented using long in C, which gives them at least 32 bits of precision (sys.maxint is always set to the maximum plain integer value for the current platform, the minimum value is -sys.maxint - 1). Long integers have unlimited precision

我有一些对整数进行非科学数学运算的代码,我担心从前一种类型到后一种类型的隐式转换:

  1. 据推测,后一种类型比前一种效率低得多
  2. 更重要的是,过渡到后者可能意味着(至少在我的代码中)存在一些错误

可以在每个数学运算之后放置代码来检查类型,但这甚至会使表达式

 a * b + 2 * c * d

变成一堆乱七八糟的不可读代码。

是否有任何方法可以设置一些异常,以防某些数字对于常规 int 来说太大了?

Python 当前版本无法设置异常。随着时间的推移,Python 开发人员试图隐藏 intlong 类型之间的差异。在Python3中,唯一的整数类型是无限精度类型(虽然叫int)。

非常旧的 Python 版本(2.2 之前;大约 2001 年)不会自动将 int 类型提升为 long 类型。而是引发了异常。不幸的是,这导致了更多的错误。我记得需要用尾随 L 来初始化整数常量以强制进行无限精度计算。详情请参阅 PEP 237

您可以创建自己的 class 扩展 int 然后覆盖它的 dunder 方法,对吗?