我正在玩 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>
现在,我知道没有名为 fib 的 python 内置函数,只是为了测试,我尝试将名称“fib”更改为“poopypants”之类的愚蠢名称,但它仍然说它是内置的。 fib 函数的命名空间发生了什么?我在其他地方的一个更大的代码块中遇到了这个问题,这阻止了我对我创建的类进行 pickle - pickle 提示它在它所属的模块中找不到我的函数 - 但我想我应该简化它问题在这里。
供引用 - OSX 10.12.6 上的 python 2.7.11/cython 0.26
最佳答案
这已在评论中解决,但作为完整性答案发布:
Python 将这些函数描述为“内置函数”纯粹是为了表示它是用 C 语言编译的,而不是表示它是一个标准库函数,因此存在问题 - 在正确的模块。
在我的电脑上,它显示为 <cyfunction module.function_name at 0xsome_address>
这是一条更有帮助的消息。我认为这可能是 Python 3 的改进(但我不是 100% 确定)。
关于python - Cython .pyx 中定义的函数成为内置函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46494401/