在cython中传递float而不是int时,为什么不出现类型错误

时间:2018-07-23 18:12:28

标签: cython

我有一个cython功能:

[ExitDate]

如果我用以下方式调用它:

=DateDiff("d", [EntryDate], Nz([ExitDate], Date()))

我得到了值def test(int a, int b): return a+b

为什么没有输入错误?

1 个答案:

答案 0 :(得分:1)

这是因为float定义了特殊功能__int__,在此过程中Cython调用了该特殊功能(或更精确的PyNumber_Long,至少是我的猜测,因为它不是通过所有这些定义和ifdef很容易track the call

这很重要:如果您的对象定义了__int__,那么Cython可以将其用作整数。使用Cython进行隐式类型检查不是很可靠。

如果需要,您可以检查输入是否为int对象,如以下示例所示(对于Python3,对于Python2,它有点复杂,因为存在不同的{{1} }类)

int