当前位置: 首页 > news >正文

外贸门户网站建设微信公众上传wordpress

外贸门户网站建设,微信公众上传wordpress,重庆响应式网站设计,在线分析网站Python/C API Python/C API可能是被最广泛使用的方法。它不仅简单#xff0c;而且可以在C代码中操作你的Python对象。 这种方法需要以特定的方式来编写C代码以供Python去调用它。所有的Python对象都被表示为一种叫做PyObject的结构体#xff0c;并且Python.h头文件中提供了各…Python/C API Python/C API可能是被最广泛使用的方法。它不仅简单而且可以在C代码中操作你的Python对象。 这种方法需要以特定的方式来编写C代码以供Python去调用它。所有的Python对象都被表示为一种叫做PyObject的结构体并且Python.h头文件中提供了各种操作它的函数。例如如果PyObject表示为PyListType(列表类型)时那么我们便可以使用PyList_Size()函数来获取该结构的长度类似Python中的len(list)函数。大部分对Python原生对象的基础函数和操作在Python.h头文件中都能找到。 示例 编写一个C扩展添加所有元素到一个Python列表(所有元素都是数字) 来看一下我们要实现的效果这里演示了用Python调用C扩展的代码 #Though it looks like an ordinary python import, the addList module is implemented in C import addList l [1,2,3,4,5] print Sum of List - str(l) str(addList.add(l)) 上面的代码和普通的Python文件并没有什么分别导入并使用了另一个叫做addList的Python模块。唯一差别就是这个模块并不是用Python编写的而是C。 接下来我们看看如何用C编写addList模块这可能看起来有点让人难以接受但是一旦你了解了这之中的各种组成你就可以一往无前了。 //Python.h has all the required function definitions to manipulate the Python objects #include //This is the function that is called from your python code static PyObject* addList_add(PyObject* self, PyObject* args){ PyObject * listObj; //The input arguments come as a tuple, we parse the args to get the various variables //In this case its only one list variable, which will now be referenced by listObj if (! PyArg_ParseTuple( args, O, listObj )) return NULL; //length of the list long length PyList_Size(listObj); //iterate over all the elements int i, sum 0; for (i 0; i length; i) { //get an element out of the list - the element is also a python objects PyObject* temp PyList_GetItem(listObj, i); //we know that object represents an integer - so convert it into C long long elem PyInt_AsLong(temp); sum elem; } //value returned back to python code - another python object //build value here converts the C long to a python integer return Py_BuildValue(i, sum); } //This is the docstring that corresponds to our add function. static char addList_docs[] add( ): add all elements of the list\n; /* This table contains the relavent info mapping - , , , */ static PyMethodDef addList_funcs[] { {add, (PyCFunction)addList_add, METH_VARARGS, addList_docs}, {NULL, NULL, 0, NULL} }; /* addList is the module name, and this is the initialization block of the module. , , */ PyMODINIT_FUNC initaddList(void){ Py_InitModule3(addList, addList_funcs, Add all ze lists); } 逐步解释 Python.h头文件中包含了所有需要的类型(Python对象类型的表示)和函数定义(对Python对象的操作) 接下来我们编写将要在Python调用的函数, 函数传统的命名方式由{模块名}_{函数名}组成所以我们将其命名为addList_add 然后填写想在模块内实现函数的相关信息表每行一个函数以空行作为结束 最后的模块初始化块签名为PyMODINIT_FUNC init{模块名}。 函数addList_add接受的参数类型为PyObject类型结构(同时也表示为元组类型因为Python中万物皆为对象所以我们先用PyObject来定义)。传入的参数则通过PyArg_ParseTuple()来解析。第一个参数是被解析的参数变量。第二个参数是一个字符串告诉我们如何去解析元组中每一个元素。字符串的第n个字母正是代表着元组中第n个参数的类型。例如i代表整形s代表字符串类型, O则代表一个Python对象。接下来的参数都是你想要通过PyArg_ParseTuple()函数解析并保存的元素。这样参数的数量和模块中函数期待得到的参数数量就可以保持一致并保证了位置的完整性。例如我们想传入一个字符串一个整数和一个Python列表可以这样去写 int n; char *s; PyObject* list; PyArg_ParseTuple(args, siO, n, s, list); 在这种情况下我们只需要提取一个列表对象并将它存储在listObj变量中。然后用列表对象中的PyList_Size()函数来获取它的长度。就像Python中调用len(list)。 现在我们通过循环列表使用PyList_GetItem(list, index)函数来获取每个元素。这将返回一个PyObject*对象。既然Python对象也能表示PyIntType我们只要使用PyInt_AsLong(PyObj *)函数便可获得我们所需要的值。我们对每个元素都这样处理最后再得到它们的总和。 总和将被转化为一个Python对象并通过Py_BuildValue()返回给Python代码这里的i表示我们要返回一个Python整形对象。 现在我们已经编写完C模块了。将下列代码保存为setup.py #build the modules from distutils.core import setup, Extension setup(nameaddList, version1.0, \ ext_modules[Extension(addList, [adder.c])]) 并且运行 python setup.py install 现在应该已经将我们的C文件编译安装到我们的Python模块中了。 在一番辛苦后让我们来验证下我们的模块是否有效 #module that talks to the C code import addList l [1,2,3,4,5] print Sum of List - str(l) str(addList.add(l)) 输出结果如下 Sum of List - [1, 2, 3, 4, 5] 15 如你所见我们已经使用Python.h API成功开发出了我们第一个Python C扩展。这种方法看似复杂但你一旦习惯它将变的非常有效。 Python调用C代码的另一种方式便是使用Cython让Python编译的更快。但是Cython和传统的Python比起来可以将它理解为另一种语言所以我们就不在这里过多描述了。
http://www.yutouwan.com/news/112573/

相关文章:

  • 优秀的设计网站有哪些手机 网站开发软件有哪些
  • 邯郸网站优化平台网站建设模板公司
  • 网站空间托管合同 .docwordpress自定义查询项
  • 恩施网站制作营销网站建设hanyous
  • 网站seo最新优化方法网站建设 的类型有哪些方面
  • 好看的电商网站模板下载手机网站多少钱一个
  • 品牌宝正式推出免费个人网站认证寿县移动公司网站建设
  • 网站在哪里备案公司车辆管理系统软件
  • 微信h5在哪个网站做广州移动 网站设计
  • apache 网站建设建设商城购物网站
  • 济南做网站优化的公司电商运营培训哪个机构好
  • 免费建站网站一级大录像不卡网站报错403
  • 企业网站seo工作c2c网站建设价格
  • 蔡甸城乡建设局网站广西住建局官方网站
  • 用什么网站开发做羞羞的网站
  • 国内网站设计制作wordpress多个single
  • 十堰外贸网站建设响应式网站国内外现状
  • 房产网站 模板平潭县机场建设网站
  • 常见网站建设公司术语罗湖做网站运营乐云seo
  • 哪个网站教做ppt模板晋江市建设局网站
  • 网站的尾页要怎么做wordpress会员数
  • 为什么要做手机网站开发有哪些营销推广方式
  • 一个完整的网站制作需要哪些部分组成成都房地产网站开发
  • 保定网站建设方案爆wordpress密码
  • 网站建设app开发合同内网建站软件
  • 手机建站图片网站seo设置是什么
  • 做外贸什么网站比较好做结构设计师之家官网
  • 网页站点友链之家
  • 网站开发团队成员无锡手机网站制作费用
  • 忘记网站后台账号响应式网站是什么软件做的