簡體   English   中英

從Python調用Cython C函數

[英]Calling Cython C functions from Python

我有一個名為foo.pyxCython文件, 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聲明函數有什么好處?

  1. 速度 :Cython和C可以比常規函數更快地調用cdefcpdef函數。 常規def函數是完整的Python對象。 它們需要引用計數,GIL等。
  2. 封裝 :如果函數聲明為cdef ,則不會向Python用戶公開。 如果該函數從未用於公共消費(例如,因為它不檢查其參數,或者與將來可能改變的實現細節有關),這是有益的。 當然,用戶仍然可以通過C / Cython來規避這一點,但這樣做比大多數人都會煩惱更麻煩。 這樣,它類似於雙下划線名稱修改。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM