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函数体中,输入和输出都应该被视为一维数组。
>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
>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函数体中,输入和输出都应该被视为一维数组。