5
Tôi đã một file Cython
gọi foo.pyx
chứa các chức năng sau:Gọi chức năng Cython C từ Python
def add_one(int n):
cdef int m = n + 1
return m
cdef int c_add_one(int n):
return n + 1
tôi xây dựng pyx
tập tin này bằng cython -a foo.pyx
và sau đó có thể làm:
>>> import foo
>>> foo.add_one(5)
6
>>> foo.c_add_one(5)
AttributeError: 'module' object has no attribute 'c_add_one'
Vì vậy, nó trông như tôi không thể gọi c_add_one
từ python. Những lợi thế của việc khai báo một hàm bằng cách sử dụng cdef
là gì?
'cdef' xác định một hàm có thể được truy cập _only_ từ C. Nếu bạn muốn' c_add_one' truy cập được từ Python, bạn nên sử dụng 'cpdef' để thay thế. Ưu điểm của 'cdef' là loại bỏ phần trên của lớp python khi gọi nó. –