gpt4 book ai didi

python - 如何在 pyx 文件中使用 python 调用函数

转载 作者:太空宇宙 更新时间:2023-11-04 08:11:37 26 4
gpt4 key购买 nike

我是 cython 的新手。

现在,我正在尝试导入标准 c 库并在 pyx 文件中定义一个简单的函数:

from libc.math cimport sin

cdef double f(double x):
return sin(x*x)

我用这个文件编译:

from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext

ext_modules=[
Extension("demo",
["demo.pyx"],
libraries=["m"]) # Unix-like specific
]

setup(
name = "Demos",
cmdclass = {"build_ext": build_ext},
ext_modules = ext_modules
)

并生成一个名为demo.so的库现在我试图在 python 文件中调用这个“f”函数:

import demo
print demo.f(2)

编译器说,

 Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'f'

有谁知道,我怎样才能调用pyx文件中的函数?谢谢!

最佳答案

cdef 定义的函数 不能 从 python 访问。您可以在 cython 代码中编写和使用它们,但不能公开它们。

如果你想公开一个函数,要么用def定义它,要么用cpdef定义它。

使用 def 您将创建一个普通的 python 函数,这意味着在 cython 代码中使用该函数可能需要比使用 cdef 更多的转换(因此更多的开销) .

使用cpdef cython 将生成两个 函数。一个是 exactly 将使用 cdef 定义的函数,它还将创建一个 python 函数作为该函数的包装器。 cython 代码将使用函数的纯 C 版本,从而减少开销,库将公开包装器。

关于python - 如何在 pyx 文件中使用 python 调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21263181/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com