gpt4 book ai didi

python - 如何在 cython 代码中使用 Python Decimal 对象?

转载 作者:行者123 更新时间:2023-12-04 15:32:29 24 4
gpt4 key购买 nike

我天真地尝试

from decimal cimport Decimal

cpdef Decimal to_decimal(str value):
return Decimal(value)

但是当我尝试编译这个时,我得到了以下错误

Error compiling Cython file:
------------------------------------------------------------
...
from decimal cimport Decimal
^
------------------------------------------------------------

helloworld.pyx:1:0: 'decimal.pxd' not found

Error compiling Cython file:
------------------------------------------------------------
...
from decimal cimport Decimal
^
------------------------------------------------------------

helloworld.pyx:1:0: 'decimal/Decimal.pxd' not found

Error compiling Cython file:
------------------------------------------------------------
...
from decimal cimport Decimal

cpdef Decimal to_decimal(str value):
^
------------------------------------------------------------

helloworld.pyx:3:6: 'Decimal' is not a type identifier

Error compiling Cython file:
------------------------------------------------------------
...
from decimal cimport Decimal

cpdef Decimal to_decimal(str value):
return Decimal(value)
^
------------------------------------------------------------

helloworld.pyx:4:11: 'Decimal' is not a constant, variable or function identifier

我知道 Decimal 类是从这个 c 扩展文件创建的 https://github.com/python/cpython/blob/master/Modules/_decimal/_decimal.c .所以它似乎应该在 cython 代码中可用。谁知道怎么做?

最佳答案

你是说标准库模块 decimal 吗?

如果那样,你不能cimport Decimal 因为它不是cython extension type在 pxd 文件中声明(如 C 头文件)。此外,出于同样的原因,您不能将函数返回值键入 Decimal。事实上,Decimal 是用 C 实现的,但它不是 cython 扩展类型,或者 cython 目前没有内置支持它作为类型标识符。

你想要做的看起来像:

class Foo:
pass

cpdef Foo func(): # the same compile error
pass

但是,以下是有效的:

cdef class Foo:
pass

cpdef Foo func():
pass

总之,你可以使用cdef class作为类型标识,而不是纯python类。您可以像这样修改代码:

from decimal import Decimal

cpdef to_decimal(str value):
return Decimal(value)

您可能想知道为什么会这样:cdef list my_list = [] 因为list 不是cdef 类。好吧,cython 有 built-in 支持它!

您可能还对 cython 提供的标准 header 感兴趣,通常在 site-packages/Cython/Includes 中,确保查看 cpython 子文件夹。

关于python - 如何在 cython 代码中使用 Python Decimal 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60922556/

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