首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >python内置函数的实现

python内置函数的实现
EN

Stack Overflow用户
提问于 2016-08-22 20:20:10
回答 1查看 171关注 0票数 0

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

有人知道它是怎么工作的吗?

EN

回答 1

Stack Overflow用户

发布于 2016-08-22 20:29:30

内置函数使用与解释器相同的语言实现,因此源代码因使用的Python实现而异(Jython、CPython、PyPy等)。您可能正在使用CPython,所以abs()函数是用C实现的。您可以查看此函数here的真实源代码。

代码语言:javascript
运行
复制
static PyObject *
builtin_abs(PyObject *module, PyObject *x)
{
    return PyNumber_Absolute(x);
}

可以在here中找到PyNumber_Absolute的源代码(可以说,它更有趣

代码语言:javascript
运行
复制
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(),这对于不同的对象类型是不同的。float的那个看起来是like this

代码语言:javascript
运行
复制
static PyObject *
float_abs(PyFloatObject *v)
{
    return PyFloat_FromDouble(fabs(v->ob_fval));
}

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

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39079400

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档