В зависимости от того, что вы пытаетесь сделать, создание вашего «расширения» в виде простой библиотеки DLL и доступ к нему с помощью ctypes может быть, безусловно, самым простым подходом.
Я использовал ваш код, слегка откорректированный и сохраненный как mydll.c
:
#include <stdio.h>
#include <math.h>
#define DLL_EXPORT __declspec(dllexport)
DLL_EXPORT double valuex(float value, double rate, double timex)
{
float value;
double rate, timex;
return value / (double) pow ((1 + rate), (timex));
}
Я скачал Tiny C Compiler и вызвал эту команду.
tcc -shared mydll.c
(Я полагаю, что добавление -rdynamic
избавит от необходимости разбрызгивать DLL_EXPORT по всей вашей функции def.)
Это сгенерировано mydll.dll
. Затем я запустил Python:
Python 3.1.2 (r312:79149, Mar 21 2010, 00:41:52) ... on win32
>>> from ctypes import *
>>> mydll = cdll.mydll
>>> valuex = mydll.valuex
>>> valuex.argtypes = [c_float, c_double, c_double]
>>> valuex.restype = c_double
>>> valuex(1.2, 2.3, 3.4)
2.0470634033800796e-21