织梦CMS - 轻松建站从此开始!

罗索

很好的c++和Python混合编程文章(2)

jackyhwei 发布于 2010-06-03 21:05 点击:次 
c++中嵌入python入门2 1. 一个有一个参数的例子 python文件 #Filenametest2.py def Hello(s): print Hello,world! print s cpp文件 #includepython.h int main() { Py_Initialize(); PyObject*pM
TAG:

c++中嵌入python入门2

1. 一个有一个参数的例子

python文件

  1. #Filename test2.py 
  2.  
  3. def Hello(s): 
  4.     print "Hello, world!" 
  5.     print s 

cpp文件

  1. #include <python.h> 
  2. int main() 
  3.  Py_Initialize(); 
  4.  
  5.  PyObject * pModule = NULL; 
  6.  PyObject * pFunc   = NULL; 
  7.  PyObject * pArg    = NULL; 
  8.  
  9.  pModule = PyImport_ImportModule("test2"); 
  10.  pFunc   = PyObject_GetAttrString(pModule, "Hello"); 
  11.  pArg    = Py_BuildValue("(s)""function with argument"); 
  12.  
  13.  PyEval_CallObject(pFunc, pArg); 
  14.  
  15.  Py_Finalize(); 
  16.  
  17.  return 0; 

注意,参数要以tuple元组形式传入。因为这个函数只要一个参数,所以我们直接使用(s)构造一个元组了。

2. 一个有两个参数的例子

python文件中加入以下代码,一个加函数

  1. def Add(a, b): 
  2.     print "a+b=", a+b 

cpp文件,只改了两行,有注释的那两行

  1. #include <python.h> 
  2. int main() 
  3.  Py_Initialize(); 
  4.  
  5.  PyObject * pModule = NULL; 
  6.  PyObject * pFunc   = NULL; 
  7.  PyObject * pArg    = NULL; 
  8.  
  9.  pModule = PyImport_ImportModule("test2"); 
  10.  pFunc   = PyObject_GetAttrString(pModule, "Add");//终于告别hello world了,开始使用新的函数 
  11.  pArg    = Py_BuildValue("(i,i)", 10, 15);//构造一个元组 
  12.  
  13.  PyEval_CallObject(pFunc, pArg); 
  14.  
  15.  Py_Finalize(); 
  16.  
  17.  return 0; 
  18. }

其它的就类似了。。。基本上,我们知道了怎么在c++中使用python中的函数。接下来学习一下如何使用python中的class。

附:Py_BuildValue的使用例子,来自python documentation:

    Py_BuildValue("")                        None
    Py_BuildValue("i", 123)                  123
    Py_BuildValue("iii", 123, 456, 789)      (123, 456, 789)
    Py_BuildValue("s", "hello")              'hello'
    Py_BuildValue("ss", "hello", "world")    ('hello', 'world')
    Py_BuildValue("s#", "hello", 4)          'hell'
    Py_BuildValue("()")                      ()
    Py_BuildValue("(i)", 123)                (123,)
    Py_BuildValue("(ii)", 123, 456)          (123, 456)
    Py_BuildValue("(i,i)", 123, 456)         (123, 456)
    Py_BuildValue("[i,i]", 123, 456)         [123, 456]
    Py_BuildValue("{s:i,s:i}", "abc", 123, "def", 456)    {'abc': 123, 'def': 456}
    Py_BuildValue("((ii)(ii)) (ii)",1, 2, 3, 4, 5, 6)          (((1, 2), (3, 4)), (5, 6))

(jacky2019)

本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201006/9574.html]
本文出处:cppblog.com 作者:jacky2019
顶一下
(4)
80%
踩一下
(1)
20%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容