Поиск…


Использование функций из пользовательской библиотеки C

У нас есть библиотека C с именем my_random которая производит случайные числа из пользовательского дистрибутива. Он предоставляет две функции, которые мы хотим использовать: set_seed(long seed) и rand() (и многое другое нам не нужно). Чтобы использовать их в Китоне, нам нужно

  1. определить интерфейс в файле .pxd и
  2. вызовите функцию в файле .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


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow