我是python中的新手,我想研究python内置函数的实现,如abs()
,但在\__builtin__.py
的python文件中我看到了:
有人知道它是如何运作的吗?
答案 0 :(得分:5)
内置函数使用与解释器相同的语言实现,因此源代码根据您使用的Python实现(Jython,CPython,PyPy等)而有所不同。您可能正在使用CPython,因此{C}实现abs()
函数。您可以查看此函数here的真实源代码。
static PyObject *
builtin_abs(PyObject *module, PyObject *x)
{
return PyNumber_Absolute(x);
}
可以找到PyNumber_Absolute
的源代码(可以说,更有趣)here:
PyObject *
PyNumber_Absolute(PyObject *o)
{
PyNumberMethods *m;
if (o == NULL)
return null_error();
m = o->ob_type->tp_as_number;
if (m && m->nb_absolute)
return m->nb_absolute(o);
return type_error("bad operand type for abs(): '%.200s'", o);
}
正如您所看到的,abs()
调用nb_absolute()
的实际实现对于不同的对象类型是不同的。浮动的那个看起来like this
static PyObject *
float_abs(PyFloatObject *v)
{
return PyFloat_FromDouble(fabs(v->ob_fval));
}
因此,实际上,CPython在这种情况下只使用C数学库。对于Python的其他实现也是如此--Jython使用Java数学库中的函数。