gpt4 book ai didi

python - 检查对象是否为十进制的正确方法

转载 作者:太空宇宙 更新时间:2023-11-03 13:55:13 25 4
gpt4 key购买 nike

对于 int 对象,可以像这样使用 cpython 中导入的函数:

%%cython
from decimal import Decimal
from cpython cimport PyLong_Check

val_decimal = Decimal(1)
print(PyLong_Check(val_decimal))
False

但是decimal好像没有对应的函数。

另一种方法是像这样使用try-except:

%%cython
from decimal import Decimal
from cpython cimport PyFloat_Check

cdef bint check(object val):
if PyFloat_Check(val):
return False
try:
float(val)
return True
except:
return False

val_decimal = Decimal(1.1)
val_float = 1.1
print (check(val_decimal))
print (check(val_float))
True
False

但是这不仅会捕获 decimal,还会捕获所有可能转换为 float 的内容。例如。 check("1.1") 也返回 True('str' 也可能被排除在 check() 中,但这看起来像 'workaround'仅 - 无法保证 check() 现在 decimal 时触发。

那么在 cython 中检查 decimal 的正确方法是什么?

最佳答案

Decimal 是用 C implementation 写的和一个 Python fallback (code for fallback)。因此,它实际上并不是您可以使用 C API 函数来检查的单一类型。像在 Python 中一样使用 isinstance

即使您确实设法使用了 C implementation type-check它只是被定义为 C API isinstance 等价物周围的宏 - 花费大量时间试图强制它工作确实没有任何优势。

关于python - 检查对象是否为十进制的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57055027/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com