Is there any type for function in Cython?

前端 未结 1 1593
花落未央
花落未央 2020-12-13 07:05

Is there any way to tell Cython compiler that param is function. Something like

  cpdef float calc_class_re(list data, func callback)
相关标签:
1条回答
  • 2020-12-13 07:33

    Should be self-explanatory..? :)

    # Define a new type for a function-type that accepts an integer and
    # a string, returning an integer.
    ctypedef int (*f_type)(int, str)
    
    # Extern a function of that type from foo.h
    cdef extern from "foo.h":
        int do_this(int, str)
    
    # Passing this function will not work.
    cpdef int do_that(int a, str b):
        return 0
    
    # However, this will work.
    cdef int do_stuff(int a, str b):
        return 0
    
    # This functio uses a function of that type. Note that it cannot be a
    # cpdef function because the function-type is not available from Python.
    cdef void foo(f_type f):
        print f(0, "bar")
    
    # Works:
    foo(do_this)   # the externed function
    foo(do_stuff)  # the cdef function
    
    # Error:
    # Cannot assign type 'int (int, str, int __pyx_skip_dispatch)' to 'f_type'
    foo(do_that)   # the cpdef function
    
    0 讨论(0)
提交回复
热议问题