2016-08-22 53 views
0

我在python大一,我想学习Python的像abs()内建函数的FPGA实现,但在\__builtin__.py蟒蛇文件,我看到了这一点:FPGA实现的Python内建功能

builtin_abs_function

不任何人都知道它是如何工作的?

+3

Cpython实现在[github]上有一个仓库(https://github.com/python/cpython) – YiFei

+0

实际上,官方的仓库在[hg.python.org]上(https://hg.python.org/cpython /) –

+0

@TimFuchs是的,但github的一个更容易浏览,并*主要*保持同步 –

回答

5

内置函数使用与解释器相同的语言实现,因此根据您使用的Python实现(Jython,CPython,PyPy等),源代码是不同的。您可能正在使用CPython,所以abs()函数在C中实现。您可以查看此函数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数学库中的函数。