python - Cython .pyx 中定义的函数成为内置函数?

标签 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>

现在,我知道没有名为 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/

相关文章:

python - PyTorch 张量切片和内存使用情况

PHP根据文件夹结构动态生成命名空间

namespaces - Azure SB 配对命名空间 - 虹吸如何工作?

python - 在纯 Python Cython 代码中设置可见性

python - 将 Python asyncio 接口(interface)与 Cython 库结合使用

python - 无法在我的 Django 应用程序的 models.py 中使用 imageField 显示照片?

python - 将 pandas 列定位或移动到特定的列索引

python - python 中的碰撞形状

r - 如何在 Shiny 模块中使用 ShinyFiles 包 - 命名空间问题?

python - Pypi 和 Cython