把Python嵌入C/C++模块与函数的操作步骤介绍

在计算机语言中的实际应用中你是否对如何把Python嵌入C/C++中的释放资源的实际操作步骤有疑问或是对其感兴趣?如果你实际操作中真的存在相关的问题或是对其有很浓的兴趣的话,你就可以点击以下的文章。

在计算机语言中的实际应用中你是否对如何把Python嵌入C/C++中的释放资源的实际操作步骤有疑问或是对其感兴趣?如果你实际操作中真的存在相关的问题或是对其有很浓的兴趣的话,你就可以点击以下的文章。

把Python嵌入C++的运算符重载中你如果在C++中对相关运算符重载后,把Boost.Python传给Python时,你就可以将以下的代码将Msg类的“+”运算符重载,然后通过“.def(self

把Python嵌入C/C++较低层次嵌入),如果你需要在C程序的实际运用中用Python脚本来传递相关参数时,或想要获得Python脚本的相关返回值时,要用相关函数编写C程序时,你想对Python嵌入C/C++较低层次嵌入)有更好的了了解的话,可以浏览以下的文章,由于Python有自己的数据类型,因此在C程序中要使用专门的API对相应的数据类型进行操作。常用的函数有以下几种。

Python 函数和模块,Python函数模块

把Python嵌入C/C++中的释放资源

把Python嵌入C/C++中的释放资源

  • self)”传递给Python。

    class Msg:public Message  {  public:  int count;  Msg(std::string m):Message(m)  {  }  void setcount(int n)  {  count = n;  }  int getcount()  {  return count;  }  int operator+ (Msg x) const  {  int r;  r = count + x.count;  return r;  }  };  BOOST_PYTHONMODULE(Message)  {  class(“Message”,init())  .addproperty(“msg”,&Message::get,&Message::set);  class >(“Msg”,init())  .def(“setcount”, &Msg::setcount)  .def(“getcount”, &Msg::getcount)  .def(self + self);  }  

数字与字符串处理 在Python/C
API中提供了Py_BuildValue()函数对数字和字符串进行转换处理,使之变成Python中相应的数据类型。其函数原型如下所示。

介绍

在python中也存在函数的概念,标准的函数我们可以叫内置函数,这类函数可以直接通过函数名进行调用。但是还有其它的一些不是内置的函数就不能直接通过函数名进行调用了,比如floor函数(向下取整),这时我们就需要用到模块;本篇主要介绍math和cmath。

python版本:3.4.4

 

内置函数(标准函数)

先来看一下标准函数,如果使用IDLE程序做测试,输入内置函数时函数名称的颜色会变成紫色,而非内置函数则不会。

1.abs:绝对值

>>> abs(-5)
5

2.pow(x,y):x的y次方

>>> pow(2,3)
8

非内置函数

语法

import math[cmath]

math[cmath].function_name

from math[cmath] improt function_name

注意:cmath的用法和math是一样,但是cmath是用来处理复数,比如你需要对一个负数进行求平方根时,这时就需要用到cmath 

1.floor:向下取整

>>> floor(31.5)
Traceback (most recent call last):
  File "<pyshell#70>", line 1, in <module>
    floor(31.5)
NameError: name 'floor' is not defined

由于floor不是标准函数,直接调用会报错,这时就需要用到模块。

>>> import math
>>> math.floor(31.5)
31

>>> from math import floor
>>> floor(31.5)
31

2.sqrt:取平方根

>>> import math
>>> math.sqrt(4)
2.0
>>> math.sqrt(-4)
Traceback (most recent call last):
  File "<pyshell#82>", line 1, in <module>
    math.sqrt(-4)
ValueError: math domain error

可以看到使用math对负数进行取平方根会报错,这时就需要使用cmath

>>> import cmath
>>> cmath.sqrt(-4)
2j

>>> from cmath import sqrt
>>> sqrt(-4)
2j

其它函数

 威尼斯娱乐场 1

Python使用引用计数机制对内存进行管理,实现自动垃圾回收。在C/C++中使用Python对象时,应正确地处理引用计数,否则容易导致内存泄漏。在Python/C
API中提供了Py_CLEAR()、Py_DECREF()等宏来对引用计数进行操作。

Python使用引用计数机制对内存进行管理,实现自动垃圾回收。在C/C++中使用Python对象时,应正确地处理引用计数,否则容易导致内存泄漏。在Python/C
API中提供了Py_CLEAR()、Py_DECREF()等宏来对引用计数进行操作。

把Python嵌入C++的运算符重载中对于其他的运算符重载也可以使用同样的方法,如下所示。

PyObject* Py_威尼斯娱乐场,BuildValue( const char *format, …)

总结

 python的语法在每个新的版本会存在变化,需要经常关注每个新版本有哪些改动的地方。

 

 

 

备注:

    作者:pursuer.chen

    博客:http://www.cnblogs.com/chenmh

本站点所有随笔都是原创,欢迎大家转载;但转载时必须注明文章来源,且在文章开头明显处给明链接。

《欢迎交流讨论》

函数和模块,Python函数模块 介绍
在python中也存在函数的概念,标准的函数我们可以叫内置函数,这类函数可以直接通过函数名进行调…

当使用Python/C
API中的函数创建列表、元组、字典等后,就在内存中生成了这些对象的引用计数。在对其完成操作后应该使用Py_CLEAR()、Py_DECREF()等宏来销毁这些对象。其原型分别如下所示。

当使用Python/C
API中的函数创建列表、元组、字典等后,就在内存中生成了这些对象的引用计数。在对其完成操作后应该使用Py_CLEAR()、Py_DECREF()等宏来销毁这些对象。其原型分别如下所示。

.def(self – self) // 相当于_sub_方法

其参数含义如下。

  • Python运行是由Graminit.c定义的相关介绍
  • Python嵌入C++来弥补C++本身不足之处的方
  • Python嵌入C/C++会产生的强大功能的介绍
  • Python嵌入C/C++较低层次嵌入)时所需
  • 把Python嵌入C/C++元组操作的具体以应用
  • Python运行是由Graminit.c定义的相关介绍
  • Python嵌入C++来弥补C++本身不足之处的方
  • Python嵌入C/C++会产生的强大功能的介绍
  • Python嵌入C/C++较低层次嵌入)时所需
  • 把Python嵌入C/C++元组操作的具体以应用

.def(self * self) // 相当于_mul_方法

· format:格式化字符串,如表8-1所示。

void Py_CLEAR( PyObject *o)

void Py_CLEAR( PyObject *o)

.def(self /self) // 相当于_div_方法

  • “IBM论坛2010”隆重召开 智慧主题仍为核
  • 借助IBM智慧 打赢数据战争
  • IBM相伴“智慧的城市”起航
  • 专访博通企业网络事业部CTO:升级到云计
  • Python嵌入C/C++会产生的强大功能的介绍

void Py_DECREF( PyObject *o)

void Py_DECREF( PyObject *o)

.def(self < self); // 相当于_lt_方法

Py_BuildValue()函数中剩余的参数即要转换的C语言中的整型、浮点型或者字符串等。其返回值为PyObject型的指针。在C语言中,所有的Python类型都被声明为PyObject型。

其参数含义如下。

其参数含义如下。

以上就是对Python嵌入C++的运算符重载相关的内容的介绍,望你会有所收获。

列表操作

o:要进行操作的对象。

o:要进行操作的对象。

在Python/C
API中提供了PyList_New()函数用以创建一个新的Python列表。PyList_New()函数的返回值为所创建的列表。其函数原型如下所示。

对于Py_CLEAR()其参数可以为NULL指针,此时,Py_CLEAR()不进行任何操作。而对于Py_DECREF()其参数不能为NULL指针,否则将导致错误。

对于Py_CLEAR()其参数可以为NULL指针,此时,Py_CLEAR()不进行任何操作。而对于Py_DECREF()其参数不能为NULL指针,否则将导致错误。

PyObject* PyList_New( Py_ssize_t len)

把Python嵌入C/C++模块与函数

把Python嵌入C/C++模块与函数

其参数含义如下。

使用Python/C
API中的PyImport_Import()函数可以在C程序中导入Python模块。PyImport_Import()函数返回一个模块对象。其函数原型如下所示。

使用Python/C
API中的PyImport_Import()函数可以在C程序中导入Python模块。PyImport_Import()函数返回一个模块对象。其函数原型如下所示。

·
len:所创建列表的长度。当列表创建以后,可以使用PyList_SetItem()函数向列表中添加项。其函数原型如下所示。

PyObject* PyImport_Import( PyObject *name)

PyObject* PyImport_Import( PyObject *name)

int PyList_SetItem( PyObject *list, Py_ssize_t index,
 PyObject *item) 

其参数含义如下。

其参数含义如下。

其参数含义如下。

name:要导入的模块名。

name:要导入的模块名。

· list:要添加项的列表。

使用Python/C
API中的PyObject_CallObject()函数和PyObject_CallFunction()函数,可以在C程序中调用Python中的函数。其参数原型分别如下所示。

使用Python/C
API中的PyObject_CallObject()函数和PyObject_CallFunction()函数,可以在C程序中调用Python中的函数。其参数原型分别如下所示。

· index:所添加项的位置索引。

PyObject* PyObject_CallObject( PyObject *callable_object, PyObject
*args)

PyObject* PyObject_CallObject( PyObject *callable_object, PyObject
*args)

· item:所添加项的值。

PyObject* PyObject_CallFunction( PyObject *callable, char *format,
…)

PyObject* PyObject_CallFunction( PyObject *callable, char *format,
…)

同样可以使用Python/C
API中PyList_GetItem()函数来获取列表中某项的值。PyList_GetItem()函数返回项的值。其函数原型如下所示。

对于PyObject_CallObject()函数,其参数含义如下。

对于PyObject_CallObject()函数,其参数含义如下。

PyObject* PyList_GetItem( PyObject *list, Py_ssize_t index)

callable_object:要调用的函数对象。

callable_object:要调用的函数对象。

其参数含义如下。

args:元组形式的参数列表。

args:元组形式的参数列表。

· list:要进行操作的列表。

对于PyObject_CallFunction()函数,其参数含义如下。

对于PyObject_CallFunction()函数,其参数含义如下。

· index:项的位置索引。

callable_object:要调用的函数对象。

callable_object:要调用的函数对象。

Python嵌入C/C++较低层次嵌入)的实际操作过程中,Python/C
API中提供了与Python中列表操作相对应的函数。例如列表的append方法对应于PyList_Append()函数。列表的sort方法对应于PyList_Sort()函数。列表的reverse方法对应于PyList_Reverse()函数。其函数原型分别如下所示。

format:指定参数的类型。

format:指定参数的类型。

int PyList_Append( PyObject *list, PyObject *item)

…:向函数传递的参数。

…:向函数传递的参数。

int PyList_Sort( PyObject *list)

使用Python/C
API中的PyModule_GetDict()函数可以获得Python模块中的函数列表。PyModule_GetDict()函数返回一个字典。字典中的关键字为函数名,值为函数的调用地址。其函数原型如下所示。

使用Python/C
API中的PyModule_GetDict()函数可以获得Python模块中的函数列表。PyModule_GetDict()函数返回一个字典。字典中的关键字为函数名,值为函数的调用地址。其函数原型如下所示。

int PyList_Reverse( PyObject *list)

PyObject* PyModule_GetDict( PyObject *module)

PyObject* PyModule_GetDict( PyObject *module)

对于PyList_Append()函数,其参数含义如下。

其参数含义如下。

其参数含义如下。

· list:要进行操作的列表。

module:已导入的模块对象。

module:已导入的模块对象。

· item:要参加的项。

以上就是对如何把Python嵌入C/C++中的释放资源以及Python嵌入C/C++模块与函数相关的内容的介绍,望你会有所收获。

以上就是对如何把Python嵌入C/C++中的释放资源以及Python嵌入C/C++模块与函数相关的内容的介绍,望你会有所收获。

对于PyList_Sort()和PyList_Reverse()函数,其参数含义相同。

· list:要进行操作的列表。

以上就是对Python嵌入C/C++较低层次嵌入)相关的内容的介绍,望你会有所收获。

发表评论

电子邮件地址不会被公开。 必填项已用*标注