我搜索了FloorDiv甚至Div,Add,Sub等定义的代码,但我没有像我想要的那样定义。
在Python / ast.c中:
case DOUBLESLASH:
return FloorDiv;
case '/':
if (STR(n)[1] == '/')
return FloorDiv;
else
return Div;
在Python / compile.c中:
case BINARY_FLOOR_DIVIDE:
case BINARY_TRUE_DIVIDE:
return -1;
case INPLACE_FLOOR_DIVIDE:
case INPLACE_TRUE_DIVIDE:
return -1;
在Parser / Python.asdl中:
operator = Add | Sub | Mult | MatMult | Div | Mod | Pow | LShift
| RShift | BitOr | BitXor | BitAnd | FloorDiv
语法/语法:
arith_expr: term (('+'|'-') term)*
term: factor (('*'|'@'|'/'|'%'|'//') factor)*
http://eli.thegreenplace.net/2010/06/30/python-internals-adding-a-new-statement-to-python/帮助我找到了这些地方但不是我想要的地方。
答案 0 :(得分:0)
如果我理解正确,您是否在询问CPython源代码中的实际楼层划分操作的定义?在这种情况下,它位于文件Objects/longobject.c:
中static PyObject *
long_div(PyObject *a, PyObject *b)
{
PyLongObject *div;
CHECK_BINOP(a, b);
if (l_divmod((PyLongObject*)a, (PyLongObject*)b, &div, NULL) < 0)
div = NULL;
return (PyObject *)div;
}
该函数依次调用l_divmod()
,您也可以在该文件中找到该定义。
这实际上是针对Python 3中的int
类型,但由于历史原因,该文件名为longobject.c
。请注意,__floordiv__
(//
)等方法是按类定义的,因此上述内容仅适用于整数。要查找浮点数的代码,请参阅float_floor_div()
中的Objects/floatobject.c
。