0
我在python大一,我想学习Python的像abs()
内建函数的FPGA实现,但在\__builtin__.py
蟒蛇文件,我看到了这一点:FPGA实现的Python内建功能
不任何人都知道它是如何工作的?
我在python大一,我想学习Python的像abs()
内建函数的FPGA实现,但在\__builtin__.py
蟒蛇文件,我看到了这一点:FPGA实现的Python内建功能
不任何人都知道它是如何工作的?
内置函数使用与解释器相同的语言实现,因此根据您使用的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数学库中的函数。
Cpython实现在[github]上有一个仓库(https://github.com/python/cpython) – YiFei
实际上,官方的仓库在[hg.python.org]上(https://hg.python.org/cpython /) –
@TimFuchs是的,但github的一个更容易浏览,并*主要*保持同步 –