17
Có cách nào để nói với trình biên dịch Cython rằng param là hàm. Một cái gì đó nhưCó loại chức năng nào trong Cython không?
cpdef float calc_class_re(list data, func callback)
Có cách nào để nói với trình biên dịch Cython rằng param là hàm. Một cái gì đó nhưCó loại chức năng nào trong Cython không?
cpdef float calc_class_re(list data, func callback)
Nên tự giải thích ..? :)
# 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
Nếu mọi thứ khác không thành công, bạn có thể có khả năng piggyback trên C 'typedef'. Có thể có một cách tốt hơn, thuần khiết-Cython mặc dù. – delnan
Bạn có nghĩa là hàm python hay hàm c? nhận xét của "delnan" sẽ hoạt động cho c khi chữ ký hàm được biết. – shaunc
Với chức năng 'cdef' hoặc' cpdef', functype kiểu C sẽ hoạt động. Giống như 'ctypedef (* my_func_type) (đối tượng, int, float, str)'. Bạn cần sử dụng kiểu 'object' cho các hàm tinh khiết-python. –