[英]Calling Cython C functions from Python
我有一個名為foo.pyx
的Cython
文件, foo.pyx
包含以下函數:
def add_one(int n):
cdef int m = n + 1
return m
cdef int c_add_one(int n):
return n + 1
我使用cython -a foo.pyx
構建這個pyx
文件,然后可以:
>>> import foo
>>> foo.add_one(5)
6
>>> foo.c_add_one(5)
AttributeError: 'module' object has no attribute 'c_add_one'
所以看起來我無法從python中調用c_add_one
。 使用cdef
聲明函數有什么好處?
cdef
和cpdef
函數。 常規def
函數是完整的Python對象。 它們需要引用計數,GIL等。 cdef
,則不會向Python用戶公開。 如果該函數從未用於公共消費(例如,因為它不檢查其參數,或者與將來可能改變的實現細節有關),這是有益的。 當然,用戶仍然可以通過C / Cython來規避這一點,但這樣做比大多數人都會煩惱更麻煩。 這樣,它類似於雙下划線名稱修改。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.