给定一个任意的 python 对象,确定它是否为数字的最佳方法是什么?这里 is
被定义为 acts like a number in certain circumstances
。
例如,假设您正在编写矢量类。如果给定另一个向量,您想找到点积。如果给定一个标量,您想缩放整个向量。
Checking if something is int
, float
, long
, bool
is annoying and doesn’t cover user-defined objects that might act like数字。但是,例如,检查 __mul__
还不够好,因为我刚才描述的向量类会定义 __mul__
,但它不是我想要的那种数字。
原文由 Claudiu 发布,翻译遵循 CC BY-SA 4.0 许可协议
使用
Number
来自numbers
模块来测试isinstance(n, Number)
(自 2.6 起可用)。当然,这与鸭子打字相反。如果您更关心一个对象的 行为 方式而不是它 是 什么,那么就好像您有一个数字一样执行您的操作,并使用异常来告诉您其他情况。