他们有没有办法在不牺牲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()

最佳答案

对于Cython,[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,您可以浏览和检查)。

10-04 16:36