3

他们有什么方法可以完成这项工作,而不牺牲 cdef 调用者中的 cdef 吗?(也不使用 cpdef)

from array import *
from numpy import *
cdef class Agents:
    cdef public caller(self):
        print "caller"
        A[1].called()

    cdef called(self):
        print "called"


A = [Agents() for i in range(2)]

def main():
    A[0].caller()
4

1 回答 1

4

对于 Cython A[1] 将是一个 python 对象。如果您希望仍能使用 cdef,请在调用者中使用自动转换:

cdef public caller(self):
    cdef Agents agent
    print "caller"
    agent = A[1]
    agent.called()

您可以使用 cython 中的 -a 模式检查每行代码是使用 Python 还是 C。(cython -a yourfile.pyx -> 将生成您可以浏览和检查的 yourfile.html)。

于 2011-03-04T18:39:17.420 回答