实现python内置函数

0 python built-in

我是python中的新手,我想学习python的内置函数的实现abs(),但是在\__builtin__.py我看到的python文件中:

builtin_abs_function

有人知道它是如何工作的吗?

Tim*_*chs 5

内置函数使用与解释器相同的语言实现,因此源代码根据您使用的Python实现(Jython,CPython,PyPy等)而有所不同.您可能正在使用CPython,因此该abs()函数在C中实现.您可以在此处查看此函数的真实源代码.

static PyObject *
builtin_abs(PyObject *module, PyObject *x)
{
    return PyNumber_Absolute(x);
}
Run Code Online (Sandbox Code Playgroud)

PyNumber_Absolute可以在这里找到(可以说,更有趣)的源代码:

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);
}
Run Code Online (Sandbox Code Playgroud)

如您所见,abs()调用的实际实现nb_absolute()对于不同的对象类型是不同的.浮动的那个看起来像这样

static PyObject *
float_abs(PyFloatObject *v)
{
    return PyFloat_FromDouble(fabs(v->ob_fval));
}
Run Code Online (Sandbox Code Playgroud)

所以,实际上,CPython在这种情况下只使用C数学库.对于Python的其他实现也是如此--Jython使用Java数学库中的函数.