Bef*_*ght 3 python types cython
对于int对象,可以这样使用cpython的cimported函数:
%%cython
from decimal import Decimal
from cpython cimport PyLong_Check
val_decimal = Decimal(1)
print(PyLong_Check(val_decimal))
Run Code Online (Sandbox Code Playgroud)
False
Run Code Online (Sandbox Code Playgroud)
但似乎没有对应的功能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))
Run Code Online (Sandbox Code Playgroud)
True
False
Run Code Online (Sandbox Code Playgroud)
但这不仅会捕获decimal所有可能转换为的内容float。例如,也check("1.1")返回True(可能也排除了'str',check()但这看起来仅是'替代方法'-无法保证check()现在仅在上触发decimal)。
那么检查decimalcython 的正确方法是什么?
| 归档时间: |
|
| 查看次数: |
80 次 |
| 最近记录: |