在Cython .pyx中定义的函数是否内置?

时间:2017-09-29 17:50:13

标签: python namespaces cython pickle

我正在玩cython教程(http://docs.cython.org/en/latest/src/tutorial/cython_tutorial.html

我有一个像这样的目录:

somedir/ExampleCython.py
somedir/fib.pyx
somedir/fib.so
somedir/function_file.py
somedir/setup.py

fib.pyx定义了上面链接的cython教程中的函数fib,其中function_file.py包含以下定义:

def moopy(param):
    param += 1
    return param

和ExampleCython.py包含以下内容:

import fib as moo

print moo.fib

from function_file import moopy

print moopy

我使用python setup.py build_ext --inplace构建fib.so,然后运行python ExampleCython.py并得到以下输出:

<built-in function fib>
<function moopy at 0x1002b4398>

现在,我知道没有python内置的名为fib,只是为了测试我尝试将名称'fib'改为愚蠢的'poopypants',它仍然说它是内置的。 fib函数的命名空间发生了什么?我在其他地方的一个更大的代码块中遇到了这个问题,这阻止了我挑选我创建的类 - pickle抱怨它无法在它所属的模块中找到我的函数 - 但我想我会简化它这里有问题。

供参考 - OSX 10.12.6上的python 2.7.11 / cython 0.26

1 个答案:

答案 0 :(得分:2)

这在评论中得到了解决,但作为完整性的答案发布:

Python将函数描述为&#34;内置函数&#34;纯粹意味着它是用C编译的,而不是意味着它是一个标准的库函数,因此存在问题 - 在正确的模块中找到了正确的函数。

在我的电脑上,它显示为<cyfunction module.function_name at 0xsome_address>,这是一条更有用的信息。我认为这可能是Python 3的改进(但我并非100%肯定)。