1. 程式人生 > >C++呼叫返回多個值的Python函式

C++呼叫返回多個值的Python函式

  某些時候,用python模組來實現一些特定的功能會比用其他型別的模組更加簡潔方便。 
在C++程式中,呼叫python模組時需要載入一些必要的libs,這些libs在網上都可以找到。下面的程式碼演示了C++程式如何呼叫python中的函式,並得到從python函式中返回的多個值。 

Python程式碼  收藏程式碼
  1. # filename : cal.py  
  2. # return type : tuple  
  3. def mix(a, b) :  
  4.     r1 = a + b  
  5.     r2 = a - b  
  6.     return (r1, r2) # (7,3)  

C++程式碼  收藏程式碼
  1. #include "stdafx.h"
      
  2. #include ".\\include\\Python.h"  
  3. int _tmain(int argc, _TCHAR* argv[])  
  4. {  
  5.     string filename = "cal"// cal.py  
  6.     string methodname_mix = "mix"// function name  
  7.     Py_Initialize();    
  8.     // load the module  
  9.     PyObject * pyFileName = PyString_FromString(filename.c_str());  
  10.     PyObject * pyMod = PyImport_Import(pyFileName);   
  11.     // load the function  
  12.     PyObject * pyFunc_mix = PyObject_GetAttrString(pyMod, methodname_mix.c_str());  
  13.     // test the function is callable  
  14.     if (pyFunc_mix && PyCallable_Check(pyFunc_mix))  
  15.     {  
  16.         PyObject * pyParams = PyTuple_New(2);  
  17.         PyTuple_SetItem(pyParams, 0, Py_BuildValue("i"
    , 5));  
  18.         PyTuple_SetItem(pyParams, 1, Py_BuildValue("i", 2));  
  19.         // ok, call the function  
  20.         int r1 = 0, r2 = 0;  
  21.         PyObject * pyValue = PyObject_CallObject(pyFunc_mix, pyParams);           
  22.         PyArg_ParseTuple(pyValue, "i|i", &r1, &r2);  
  23.         if (pyValue)  
  24.         {  
  25.             printf("%d,%d\n", r1, r2); //output is 7,3  
  26.         }         
  27.     }  
  28.     Py_Finalize();    
  29.     return 0;  
  30. }  

相關推薦

C++呼叫返回Python函式

  某些時候,用python模組來實現一些特定的功能會比用其他型別的模組更加簡潔方便。 在C++程式中,呼叫python模組時需要載入一些必要的libs,這些libs在網上都可以找到。下面的程式碼演示了C++程式如何呼叫python中的函式,並得到從python函式中返回的多

c# 方法返回用out

該方法返回   a+10   和   a-10   的結果,返回兩個值: public  static  void  GetValue( int a , out int b , out

python基礎之函式返回的方法

例: >>> def test(): a=11 b=22 c=33 return a #多個return,語法不會報錯,但是隻執行第一個return return b #不會執行此條語句 return c #不會執行此條語句 >>> num

C語言如何讓一個函式返回

轉載:https://jingyan.baidu.com/article/d169e1860d278d436711d854.html 一、實現方法 1.用指標和陣列(陣列名本質上是一個指標); 2.或是你根本就不要返回,設定一個巨集觀變數(全域性變數),主函式和子函式都使用,就不用返回了

python 函式返回

(廖雪峰Python教程學習筆記) 函式體內部的語句在執行時,一旦執行到return,函式就執行完畢,並將結果返回。 如果沒有return語句,函式執行完畢後也會返回結果,只是結果為None。 return None可以簡寫為return。 Python

python函式返回

返回多個值 函式可以返回多個值嗎?答案是肯定的。 比如在遊戲中經常需要從一個點移動到另一個點,給出座標、位移和角度,就可以計算出新的新的座標: import math def move(x, y, step, angle=0): nx = x + step * m

C++函式返回

今天在回顧std::initializer_list時候,想到C++中一個函式返回多個值的方法都有哪些? 搜尋到了這麼一篇譯文,寫的還是挺全面的。 它的原文地址在這裡: 作為深度閱讀可以看

Python 返回+Lambda的使用

最大值 imp from return post 一個 lambda turn mat def MaxMin(a,b): if(a>b): return a,b else: return b,a max,min=Ma

Python返回

() class turn urn pytho emp bsp nbsp code 1 def get_abc(): 2 a = 1 3 b = 2 4 c = 3 5 return a,b,c 6 7 temp = get_abc()

用結構體指標做函式形參實現返回(fishing_6)

        最近在學ST32驅動數字攝像頭OV2640的實驗,無意中遇到了函式返回多個值的情況,決定Mark一下,說不定以後就會用到,因為一般函式都是隻有一個返回值的嘛,具體如下:         首先在標頭檔案定義結構體:                 typed

Javascript函式返回

                Javascript函式返回多個值左直拳我從來就沒有真正掌握過Javascript,又或許是Javascript不斷地在發展,有好多東西看起來常常令我覺得十分驚奇。比如說,在網上看到一條Javascript語句:Return [a,b,c,d];這是返回語句,可是它有對方括號,

函式變相做到返回的方法

 2方法1:利用全域性變數        分析:全域性變數作為C語言的一個知識點,雖然我們都瞭解它的特點,但在實際教學過程中應用得並不是很多。由於全域性變數的作用域是從定義變數開始直到程式結束,而對於編寫有多個返回值的C語言函式,我們可以考慮把要返回的多個值定義成全域性變

自定義函式 返回(指標)

#include "iostream.h"void calcu(int *a,int *b,int *l,int *angle){//進行相應的操作//比如...*l += *a;*angle += *

函式返回,傳入引數和傳出引數

 函式包括了除函式名以外還有返回值和形參。   這個形參包括了傳入引數和傳出引數;   傳入引數:就是數值的傳遞。在函式中不會修改這個引數,不會修改呼叫這個函式的函式的值。   例如   void e

lua函數返回

less logs msg exec eat 函數返回 sta cpp then function CompareString(in_source, in_compare) local ret_value; local ret_msg; if (in_sourc

4.2 使用元組-返回

parse_int(List) -> parse_int(skip_to_int(List), 0). parse_int([H|T], N) when H >= $0, H =< $9 -> parse_int(T, 10 * N + H - $0);

java如何從方法返回

import java.util.HashMap; import java.util.Map; public class Test { /** * 方法1:使用集合類 (Map以外的集合類也可以隨意使用) * 目標:返回一個數組的最大值和最小值 */ pu

redis列表型別list如何一次返回並刪除這些

redis的列表型別list是一個常用的資料型別,但是這個型別並不支援一次性返回多個值並刪除這些已經返回的值。 其實我們可以通過redis的事務,來完成這個一次性返回多個值並刪除這些已經返回的值的需求。 redis中的事務就是一組命令的集合,這些命令要麼全部執行,要麼全都

mysql儲存過程之返回

mysql儲存函式只返回一個值。要開發返回多個值的儲存過程,需要使用帶有INOUT或OUT引數的儲存過程。咱們先來看一個orders表它的結構:mysql> desc orders; +----------------+-------------+------+----

MYSQL建立一個 “將一個字串以某個分隔符分隔得到” 的函式,併為加上序號

1:首先建立一個自定義函式實現分隔的功能:思路: (1、獲取分隔符在源字串中第一次出現的位置,把獲取的位置之前的子字串賦值給表的一列 (2、把第一步獲取的位置之後的子字串賦值為新的源字串 (3、再獲取分隔符在第二步得到的新的源字串中的位置,並把獲取的位置之前的子字串賦值給表