代码之家  ›  专栏  ›  技术社区  ›  Davoud Taghawi-Nejad

在cdef类中调用cdef

  •  3
  • Davoud Taghawi-Nejad  · 技术社区  · 14 年前

    他们是否有任何方法可以在不牺牲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()
    
    1 回复  |  直到 13 年前
        1
  •  4
  •   tito    13 年前

    对于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)。