对于int
对象,可以使用 cpython 中的 cimported 函数,如下所示:
%%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()
now只会在 上触发decimal
)。
那么decimal
在 cython 中检查的正确方法是什么?
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句