C函数的包装器

SClib的Python项目详细描述


SCLIB
>BR/> BR/> BR/>一个简单的HACK,允许对Python代码中的C函数进行简单易行的评估,BR/>提高了灵活性,以便更好地权衡
计算能力和特征可用性;如Simpy.Br/>< BR> > BR/>在SCLIB [S]中的核心是cType [地狱],它实际上完成了整个
工作:它将Python数据映射到C兼容数据,并提供了一种在DLL或共享库中调用
函数的方法。sclib起到粘合的作用:它将用户的东西组合在一起,为用户提供一个易于使用的界面。[]sclib的代码和示例使用可在<;https://github.com/drestebon/sclib>;


获得sclib的要求非常简单:对任意类型和大小的
个数的数组调用函数并返回函数的输出,同样
是任意类型和大小的。

代码块::python在[1]中

:在[2]中将sc lib导入为sc
:lib=sc.clib('test.so',['fun'])

函数返回一个列表,其中包含
函数的输出数组:

。代码块::python

in[3]:out,=lib.fun([0])


在c对应项中,函数声明必须附带输入输出长度和类型的规范。这是用sclib.h中定义的helper宏完成的。代码块::c


include<;sclib.h>;
pyo(fun,1,1);
pyo_类型(fun,1,int);
pyi(fun,1,1);
pyi_类型(fun,1,int);
void fun(int*out,int*in){
*out=42;
>



可以指定任意数量的输入或输出,例如:




……代码块:c



>include<;sclib.h>;
>pyo(fun,2,1,1,2);
>pyo(fun,2,int,int,float);
>pyi(fun,2,1,1,2);
>pyi(pyi(fun,2,int,int,float);
>vovoid fun(int*out0,float*out1,float*out1,

int*in0,float*in1){
br/>*out0=42*in0[0];
out1[0]=in1[0]*in1[1];
out1[1]=powf(in1[0],in1[1]);
}


但是只有输入和输出的数量是静态的,每个组件的长度可以在运行时被覆盖:

。代码块::python

in[4]:lib.input_len['fun']=[10,1]
in[5]:lib.retype()


在这些用例中,参数的长度应该通过一个额外的整数参数赋给函数


in函数体中,输入和输出都应该被视为一维数组。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java数据不显示在FXML表中   java如何使整个JTable不可编辑   Java中的swing JTree JTable组合   Windows下的java诊断NIO DatagramChannel读取问题   java Dockerfile运行可执行文件   java手动初始化字节数组以测试更改   java Selenium Webdriver | DragAndDrop功能|也不例外,但代码不起作用   java Hibernate使用多对多关系和左连接多次加载同一实体?   java正在努力开发带有接口和泛型集的API   mongodb mongo java条件和如果不为null   Java程序不显示使用arduino ethernet shield在网页上发送的数据   java将JSONObject转换为JSONArray错误   java Box布局可以接受包含元素的大小吗?