Python nb_divide在Python 3中不再可用
几年前,我为Python2定制了一个C模块,现在我将其升级到Python3。Python nb_divide在Python 3中不再可用,python,python-3.x,cpython,Python,Python 3.x,Cpython,几年前,我为Python2定制了一个C模块,现在我将其升级到Python3。PyNumberMethods定义在2和3之间更改,以注册支持某些运算符的类 Python 2 这个班有两个除法算符。我用了第一个,它成功了 typedef struct { binaryfunc nb_add; binaryfunc nb_subtract; binaryfunc nb_multiply; binaryfunc nb_divide; <------- bin
PyNumberMethods
定义在2和3之间更改,以注册支持某些运算符的类
Python 2
这个班有两个除法算符。我用了第一个,它成功了
typedef struct {
binaryfunc nb_add;
binaryfunc nb_subtract;
binaryfunc nb_multiply;
binaryfunc nb_divide; <-------
binaryfunc nb_remainder;
[...]
binaryfunc nb_true_divide; <-------
[...]
} PyNumberMethods;
我尝试了nb\u true\u divide
,它也能工作。所有这些函数之间的区别是什么?如果我想支持foo.vector()/100.0
,我应该使用哪一个函数?还有,状态:
返回故障时o1
除以o2
的下限,或NULL
。这相当于整数的“经典”除法
这是增加的内容。至于差异,已经有人问过了,例如,参见
简而言之,如果您希望根据所使用的/
为自定义类型附加行为,请定义np\u true\u divide
槽。对于/
,使用np\u loor\u divide
还有一个,说明:
返回故障时o1
除以o2
的下限,或NULL
。这相当于整数的“经典”除法
这是增加的内容。至于差异,已经有人问过了,例如,参见
简而言之,如果您希望根据所使用的
/
为自定义类型附加行为,请定义np\u true\u divide
槽。对于/
,使用np\u loor\u divide
只是想知道,因此,在我的示例中,我也需要它来进行浮点运算,因此nb\u true\u divide
似乎是更好的选择?@DanielStephens因为np\u floor\u divide
将允许您将行为附加到//code>符号,并将np\u true\u divide
符号附加到//code>符号,我想说true\u divide
槽确实就是您想要的之后,只是想知道,因此,在我的示例中,我也需要它来进行浮点运算,因此nb\u true\u divide
似乎是更好的选择?@DanielStephens因为np\u floor\u divide
将允许您将行为附加到//code>符号,并将np\u true\u divide
符号附加到//code>符号,我想说true\u divide
槽确实就是您想要的之后
typedef struct {
binaryfunc nb_add;
binaryfunc nb_subtract;
binaryfunc nb_multiply;
binaryfunc nb_remainder; <-------
[...]
binaryfunc nb_true_divide; <-------
[...]
} PyNumberMethods;