python源代码中math.exp()定义在哪里?
我想知道在Python中怎么实现math.exp()
这个函数。请问math.exp()
是在Python源代码的哪个地方定义的呢?
1 个回答
13
这个问题有点复杂。
math
模块是用C语言写的,具体的代码在一个叫做 mathmodule.c
的文件里。在这个文件的最后,有一个特定的Python库结构,它定义了 exp
,这个是通过 math_exp
实现的:
static PyMethodDef math_methods[] = {
# ...
{"exp", math_exp, METH_O, math_exp_doc},
但是,math_exp
本身其实是通过一个叫做 FUNC1
的宏来定义的,它使用了 math_1
这个包装函数来调用 C语言库里的 exp
函数,同时还处理了一些错误和类型转换:
FUNC1(exp, exp, 1,
"exp(x)\n\nReturn e raised to the power of x.")
不过,C语言的函数实现是完全依赖于平台的,在现代硬件上,通常是由硬件直接处理的。如果你想在Python中实现这个功能,就得找一个软件版本的函数作为起点。
你可以使用 fdlibm
的实现作为起点,下面是这个库中 exp
函数的C语言实现链接:
或者你也可以参考这个实现: