把Python嵌入C/C++元组操作的具体以应用方案介绍

Python在实际的相关应用中就有很强大功能,以及C在实际的运行中也具有很强的功能。如果对Python嵌入C你有过此想法的话,你就可以浏览我们的文章,其中包括中Python嵌入C的实例。望你会有所收获。

Python在计算机语言中称得上是高一级的计算机语言,在实际的具体应用中应用较为广泛,而以下的文章是涉及到如何把Python嵌入C中的实例,以下就是文章的相关内容的介绍,望你会从此文中得到自己想要得到的相关知识。

如果你想把Python嵌入C/C++中是比较简单的事情,你需要的是在VC中添加Python的include文件目录和lib文件目录以下就是如何把Python嵌入C/C++的具体方案的相关介绍,望你会从中学到很多的东西。

你如果对把Python嵌入C/C++的元组操作的相关内容感兴趣的话,你就可以点击以下的文章对其进行了解,以下的文章会涉及到Python嵌入C/C++的元组操作的具体应用以及在操作中所要用到的相关函数的介绍。

Python简介

在VC++ 6.0中新建一个名为“EmbPython”的空“Win32 Console
Application”工程。向其添加如下所示的“EmbPython.c”文件。

把Python派森),它是一个简单的、解释型的、交互式的、可移植的、面向对象的超高级语言。这就是对Python语言的最简单的描述。

VC6.0下,打开 tools->options->directories->show directories
for,将Python安装目录下的inlude目录添加到inlude
files项中,将libs目录添加到library files项中。

把Python嵌入C/C++的元组操作

Python是一种简单易学,功能强大的解释型编程语言,它有简洁明了的语法,高效率的高层数据结构,能够简单而有效地实现面向对象编程,特别适用于快速应用程序开发,也可以用来开发大规模的重要的商业应用。Python是一个理想的脚本语言。

#include <stdio.h> #include <Python.h> int main(int argc, char* argv[])  {   PyObject *modulename, *module, *dic, *func, *args, *rel, *list;  char *funcname1 = "sum";  char *funcname2 = "strsplit";  int i;  Py_ssize_t s;   

Python有一个交互式的开发环境,因为Python是解释运行,这大大节省了每次编译的时间。Python语法简单,且内置有几种高级数据结构,如字典、列表等,使得使用起来特别简单,程序员一个下午就可学会,一般人员一周内也可掌握。Python具有大部分面向对象语言的特征,可完全进行面向对象编程。

VC2005下,打开tools->options->项目和解决方案->VC++目录,然后做相同工作。

在Python/C API中提供了PyTuple_New()函数,用以创建一个新的Python元组。PyTuple_New()函数返回所创建的元组。其函数原型如下所示。

Python免费开源,可移植到多种操作系统,只要避免使用依赖于特定操作系统的特性,Python程序无需修改就可以在各种平台上面运行。

printf(“-==在C中嵌入Python==-\n”);/* Python解释器的初始化*/

  • Python unicode ascii编码在windows上的
  • Python嵌入较低层次中常用两种函数的介绍
  • Python 嵌入C/C++ 中的元组操作的详细介
  • Python嵌入C/C++ 创建字典的实际操作步骤
  • Python嵌入C/C++在释放资源中的实际操作

代码如下:

PyObject* PyTuple_New( Py_ssize_t len)

Python拥有现代编程语言所具有的一切强大功能,Python标准库十分庞大,可以帮助开发者处理各种工作,如:图形用户界面、文件处理、多媒体、正则表达式、文档生成、单元测试、线程、数据库、网络通讯、网页浏览器、CGI、FTP、电子邮件、XML、HTML、WAV文件、密码系统、Tk和其他与系统有关的操作。只要安装了Python,这些功能都是可用的除了标准库以外,还有许多其他高质量的库,如wxPython、Twisted和Python图形库等等数不胜数。

Py_Initialize();   if(!Py_IsInitialized())   {   printf("初始化失败!");   return -1;   }   

它可以在MS-DOS、Windows、Windows
NT、Linux、Soloris、Amiga、BeOS、OS/2、VMS、QNX等多种OS上运行ython嵌入C中的实例的介绍

在debug下执行出错,“无法找到python31_d.lib文件”,后查到原因是:在debug下生成必须要有python31_d.lib文件,否则只能在release下生成

其参数含义如下。

Python容易扩展和嵌入。Python提供的许多标准模块支持C或者C++接口。Python和C可以一起工作,它可以嵌入到C或者C++的应用程序当中,因此可用Python语言为应用程序提供脚本接口,由于支持跨语言开发,可用Python设计概念化应用程序,并逐步移植到C,使用前不必用C重写应用程序。
提出问题
在某个C++应用程序中,我们用一组插件来实现一些具有统一接口的功能,我们使用Python来代替动态链接库形式的插件,这样可以方便地根据需求的变化改写脚本代码,而不是必须重新编译链接二进制的动态链接库。Python强大的功能足以胜任,但是有一些操作系统特定的功能需要用C++来实现,再由Python调用。所以,最基础地,我们需要做到:

/* 导入Python模块,并检验是否正确导入 */

编程语言Python语言可以用来作为批处理语言,写一些简单工具,处理些数据,作为其他软件的接口调试等。Python语言可以用来作为函数语言,进行人工智能程序的开发,具有Lisp语言的大部分功能。Python语言可以用来作为过程语言,进行我们常见的应用程序开发,可以和VB等语言一样应用。

#include <python.h> int main()  {  Py_Initialize();  PyRun_SimpleString("Print 'hi, python!'");  Py_Finalize();  return 0;  } 

len:所创建元组的长度。

  • 1.
    把Python嵌入到C++应用程序中,在C++程序中调用Python函数和获得变量的值;
  • 2.
    用C++为Python编写扩展模块(动态链接库),在Python程序中调用C++开发的扩展功能函数。
modulename = Py_BuildValue("s", "pytest");   module = PyImport_Import(modulename);   if(!module)   {   printf("导入pytest失败!");   return -1;   }   

Python语言可以用来作为面向对象语言,具有大部分面向对象语言的特征,常作为大型应用软件的原型开发,再用C++改写,有些直接用Python来开发。

Py_Initialize函数原型是:void Py_Initialize()

当元组创建以后,可以使用PyTuple_SetItem()函数向元组中添加项。其函数原型如下所示。

常用的Python/C API介绍
下面是例子中用到的几个Python/C
API的简要介绍及示例代码。注意,这并不是这些函数的详细介绍,而仅仅是我们所用到的功能简介,更详细内容请参考文档[1]、[2]、[3]、[4]。
打开Microsoft Visual Studio .NET 2003,新建一个控制台程序,#include
,并在main函数里加入示例代码。
//先定义一些变量

/* 获得模块中函数并检验其有效性 */

将Python嵌入C中的实例

把Python嵌入C/C++中时必须使用该函数,它初始化Python解释器,在使用其他的Python/C
API之前必须先调用该函数。可以使用Py_IsInitialized函数判断是否初始化成功,成功返回True。
PyRun_SimpleString函数原型是int PyRun_SimpleString(const char
*command),用来执行一段Python代码。

  • 浅析ASP.NET MVC 2中的Tailspin Travel U
  • 定义未来Web样式 CSS 3最新特性一览
  • Python嵌入C++来弥补C++本身不足之处的方
  • Python嵌入C/C++会产生的强大功能的介绍
  • Python嵌入C/C++较低层次嵌入)时所需
char *cstr;
PyObject *pstr, *pmod, *pdict;
PyObject *pfunc, *pargs;
dic = PyModule_GetDict(module);   if(!dic)  {  printf("错误!\n");  return -1;   }   

在VC++ 6.0中新建一个名为“EmbPython”的空“Win32 Console
Application”工程。向其添加如下所示的“EmbPython.c”文件。

注意:是否需要维持语句间的缩进呢?

int PyTuple_SetItem( PyObject *p, Py_ssize_t pos, PyObject *o)

  1. void Py_Initialize( )

/* 获得sum函数地址并验证 */

程序输出如下所示。

Py_Finalize函数原型是void
Py_Finalize(),用于关闭Python解释器,释放解释器所占用的资源。

其参数含义如下所示。

初始化Python解释器,在C++程序中使用其它Python/C
API之前,必须调用此函数,如果调用失败,将产生一个致命的错误。例:

func = PyDict_GetItemString(dic,funcname1);   if(!PyCallable_Check(func))   {    

-==在C中嵌入Python==-

PyRun_SimpleFile函数可以用来运行”.py”脚本文件,函数原型如下:

p:所进行操作的元组。

Py_Initialize();

printf(“不能找到函数 %s”,funcname1);

使用Python中的sum函数求解下列数之和

int PyRun_SimpleFile(FILE *fp, const char *filename);

pos:所添加项的位置索引。

  1. int PyRun_SimpleString( const char *command)
return -1;   }   

0 1 2 3 4


中fp是打开的文件指针,filename是要运行的python脚本文件名。但是由于该函数官方发布的是由visual
studio
2003.NET编译的,如果使用其他版本的编译器,FILE定义可能由于版本原因导致崩溃。同时,为简便起见可以使用如下方式来代替该函数:

o:所添加的项值。

执行一段Python代码,就好象是在__main__ 函数里面执行一样。例:

/* 构建列表 */

Using Function sum

PyRun_SimpleString(“execfile(‘file.py’)”);
//使用execfile来运行python文件

可以使用Python/C
API中PyTuple_GetItem()函数来获取元组中某项的值。PyTuple_GetItem()函数返回项的值。其函数原型如下所示。

PyRun_SimpleString("from time import time,ctime\n"
"print ''Today is'',ctime(time())\n");
list = PyList_New(5); 

The result is: 10

  • 用Python脚本转换成windows的可执行程序
  • 用Python编写shell脚本时经常使用的函数
  • Python编写shell脚本中常用的文件介绍
  • Python脚本在使用gdb调试时常会遇到的三
  • Python脚本的内部各函数之间的调用关系

PyObject* PyTuple_GetItem( PyObject *p, Py_ssize_t pos)

  1. PyObject* PyImport_ImportModule( char *name)

printf(“使用Python中的sum函数求解下列数之和\n”);

使用Python中的函数分割以下字符串:

Py_BuildValue()用于对数字和字符串进行转换处理,变成Python中相应的数据类型在C语言中,所有Python类型都被声明为PyObject类型),函数原型如下:

其参数含义如下。

导入一个Python模块,参数name可以是*.py文件的文件名。相当于Python内建函数__import__()。例:

for (i = 0; i < 5; i++)  {  printf("%d\t",i);  PyList_SetItem(list,i,Py_BuildValue("i",i));  }  printf("\n");   

this is an example

PyObject *Py_BuildValue(const char *format, …..);

p:要进行操作的元组。

pmod = PyImport_ImportModule("mymod"); //mymod.py

/* 构建sum函数的参数元组*/

结果如下所示:

PyString_String()用于将PyObject*类型的变量转换成C语言可以处理的char*型,具体原型如下:

pos:项的位置索引。

  1. PyObject* PyModule_GetDict( PyObject *module)

以上就是对把Python嵌入C中的实例相关的内容的介绍,望你会有所收获。

this

char* PyString_String(PyObject *p);

当元组创建以后可以使用_PyTuple_Resize()函数重新调整元组的大小。其函数原型如下所示。

相当于Python模块对象的__dict__
属性,得到模块名称空间下的字典对象。例:

is

以上就是对如何把Python嵌入C/C++中相关的内容的介绍,望你会有所收获。
 

int _PyTuple_Resize( PyObject **p, Py_ssize_t newsize)

pdict = PyModule_GetDict(pmod);

an

其参数含义如下。

  1. PyObject* PyRun_String( const char *str, int start, PyObject
    *globals, PyObject *locals)

example

p:指向要进行操作的元组的指针。

执行一段Python代码。

按回车键退出程序:
以上的相关内容就是对Python的强大功能的介绍以及如何将Python嵌入C中的实例的相关操作步骤的介绍,

newsize:新元组的大小。

pstr = PyRun_String("message", Py_eval_input, pdict, pdict);

把Python嵌入字典操作

Python是一种简单易学,功能强大的解释型编程语言,它有简洁明了的语法,高效率的高层数据结构,能够简单而有效地实现面向对…

在Python/C
API中提供了PyDict_New()函数用以创建一个新的字典。PyDict_New()函数返回所创建的字典。其函数原型如下所示。

PyObject* PyDict_New()

当字典创建后,可以使用PyDict_SetItem()函数和PyDict_SetItemString()函数向字典中添加项。其函数原型分别如下所示。

int PyDict_SetItem( PyObject *p, PyObject *key, PyObject *val)

int PyDict_SetItemString( PyObject *p, const char *key, PyObject
*val)

其参数含义如下。

p:要进行操作的字典。

key:添加项的关键字,对于PyDict_SetItem()函数其为PyObject型,对于PyDict_SetItemString()函数其为char型。

val:添加项的值。

使用Python/C
API中的PyDict_GetItem()函数和PyDict_GetItemString()函数来获取字典中某项的值。它们都返回项的值。其函数原型分别如下所示。

PyObject* PyDict_GetItem( PyObject *p, PyObject *key)

PyObject* PyDict_GetItemString( PyObject *p, const char *key)

其参数含义如下。

p:要进行操作的字典。

key:添加项的关键字,对于PyDict_GetItem()函数其为PyObject型,对于PyDict_GetItemString()函数其为char型。

使用Python/C
API中的PyDict_DelItem()函数和PyDict_DelItemString()函数可以删除字典中的某一项。其函数原型如下所示。

int PyDict_DelItem( PyObject *p, PyObject *key)

int PyDict_DelItemString( PyObject *p, char *key)

其参数含义如下。

p:要进行操作的字典。

key:添加项的关键字,对于PyDict_DelItem()函数其为PyObject型,对于PyDict_DelItemString()函数其为char型。

使用Python/C
API中的PyDict_Next()函数可以对字典进行遍历。其函数原型如下所示。

int PyDict_Next( PyObject *p, Py_ssize_t *ppos, PyObject **pkey,
PyObject **pvalue)

其参数含义如下。

p:要进行遍历的字典。

ppos:字典中项的位置,应该被初始化为0。

pkey:返回字典的关键字。

pvalue:返回字典的值。

在Python/C
API中提供了与Python中字典操作相对应的函数。例如字典的item方法对应于PyDict_Items()函数。字典的keys方法对应于PyDict_Keys()函数。字典的values方法对应于PyDict_Values()函数。其函数原型分别如下所示。

PyObject* PyDict_Items( PyObject *p)

PyObject* PyDict_Keys( PyObject *p)

PyObject* PyDict_Values( PyObject *p)

其参数含义如下。

p:要进行操作的字典。

以上就是对如何把Python嵌入C/C++的元组操作以及Python嵌入字典操作相关的内容的介绍,望你会有所收获。

发表评论

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