使用自定義 C 庫中的函式
我們有一個名為 my_random
的 C 庫,它從自定義分發中生成隨機數。它提供了我們想要使用的兩個功能:set_seed(long seed)
和 rand()
(還有更多我們不需要的功能)。為了在 Cython 中使用它們我們需要
- 在 .pxd 檔案中定義一個介面
- 在 .pyx 檔案中呼叫該函式。
碼
test_extern.pxd
# extern blocks define interfaces for Cython to C code
cdef extern from "my_random.h":
double rand()
void c_set_seed "set_seed" (long seed) # rename C version of set_seed to c_set_seed to avoid naming conflict
test_extern.pyx
def set_seed (long seed):
"""Pass the seed on to the c version of set_seed in my_random."""
c_set_seed(seed)
cpdef get_successes (int x, double threshold):
"""Create a list with x results of rand <= threshold
Use the custom rand function from my_random.
"""
cdef:
list successes = []
int i
for i in range(x):
if rand() <= threshold:
successes.append(True)
else:
successes.append(False)
return successes