我正在玩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
答案 0 :(得分:2)
这在评论中得到了解决,但作为完整性的答案发布:
Python将函数描述为&#34;内置函数&#34;纯粹意味着它是用C编译的,而不是意味着它是一个标准的库函数,因此存在问题 - 在正确的模块中找到了正确的函数。
在我的电脑上,它显示为<cyfunction module.function_name at 0xsome_address>
,这是一条更有用的信息。我认为这可能是Python 3的改进(但我并非100%肯定)。