gpt4 book ai didi

python - Cython,纯 Python 模式 : . pxd 和 @locals

转载 作者:行者123 更新时间:2023-11-28 17:41:18 27 4
gpt4 key购买 nike

我有一个 Python 程序,我想使用 Cython 加速它,同时保持 Python 解释器(“纯 Python 模式”)可读源代码。通过按原样编译,我的速度提高了 20%。然后我创建了一个 .pxd 文件并尝试在我的 .pyx 脚本中添加一些“@cython.locals(...)”来修复变量的类型。但我发现添加这两个功能前后的运行时间没有差异。所以我有三个类似的问题:

首先,我在 .pyx 中添加了:

@cython.locals(start=cython.int, end=cython.int)
class C(object):
def __init__(self, start, end)
self.start = start
self.end = end

这甚至可以做任何事情吗?

其次,如果我的 .pyx 中有一个类

class Counter(object):
def __init__(self):
self.n = 0
def __call__(self, x):
self.n += 1

我能做些什么来修复“n”的类型(就像“cdef 类”之后的“cdef int n”一样)吗?

最后,如果我的 .pyx 中有一个函数:

def count():
<do something with variables a,b,c>

在 .pxd 中写入以下内容会改变什么吗? :

cpdef inline count():
cdef:
int a
int b
int c

预先感谢您的帮助。

最佳答案

关于您的 @cython.locals,我认为您应该尝试将它放在 __init__ 方法之前,而不是在类声明之前,因为它引用构造函数。

考虑使用 @cython.cclass用于声明一个 cdef 类。

要固定变量的类型,请使用 cython.declare()@cython.locals,参见 magic attributes .

上述选项必须包含在.py.pyx 文件中,并且是特殊的cython 函数和/或装饰器。

另一种方法是将代码作为纯 Python 保存在 .py 文件中,并使用同名的扩充 .pxd 文件。 python 代码看起来会更干净,但维护单独的 .pxd 文件可能需要更长的时间。参见 this部分。这基本上就是您在上一个示例中所做的。

关于python - Cython,纯 Python 模式 : . pxd 和 @locals,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23784564/

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