当前位置:首页 » 编程语言 » c调用python返回

c调用python返回

发布时间: 2024-11-15 22:14:23

㈠ c/c++调用python中返回值为list的函数

在C/C++中调用了这个函数之后不是会返回一个PyObject对象吗?那个对象就是一个List啊,然后使用PyList_Size()获取它的大小,使用PyList_GetItem()去读取其中的元素就ok了啊。
找下Python的C API Manual,里面这些函数的用法写的很详细的。

㈡ Python C API浣跨敤镞堕渶瑕佹敞镒忎粈涔

涓锛氱敤C API涓篜ython鍐机璇瑷鍑芥暟锛屼互鏂逛究Python涓璋幂敤

1. 棣栧厛瀹炵幇涓涓鐗瑰畾铡熷瀷镄勫嚱鏁帮纴鐢≒ython C API𨱒ュ疄鐜扮殑璇濓纴镓链夊嚱鏁板繀椤绘槸杩欑嶅师鍨嬨傚繀椤绘槸绫讳技杩欐牱镄
PyObject *Fun(PyObject *self, PyObject *args)
self搴旇ユ槸鍦ㄧ敤绫荤殑镞跺欐墠浼氱敤鍒帮纸鎴戞病链夌敤鍒帮级锛宎rgs灏辨槸鍑芥暟镄勫弬鏁般傚洜涓篴rgs鏄涓涓狿yObject*绫诲瀷锛埚彲浠ヤ唬琛≒ython璇瑷涓镄勪换浣旷被鍨嬶级
2. 灏嗗弬鏁拌浆鎹㈡垚C 璇瑷琛ㄧず镄勫唴瀹癸纴鐢≒yArg_ParseTuple鍑芥暟銆
3. 镓ц屽畬闇瑕佺殑镎崭綔钖庯纴涔熷繀椤昏繑锲炰竴涓狿yObject*绫诲瀷镄勫笺傞氲繃Py_BuildValue鍑芥暟𨱒ユ瀯寤恒
杩欓噷瑕佽寸殑鏄锛屽亣濡傚笇链涜繑锲炰竴涓猅uple绫诲瀷镄勫硷纴鍙浠ュ厛鐢
PyObject *tuple = Py_BuildValue("(iis)", 1, 2, "three");
褰㈠纺𨱒ユ瀯寤猴纴锅囧傚緢澶氱殑璇濓纴鍙浠ョ敤涓嬮溃镄勬柟寮忔潵鏋勫缓
PyObject *t;

t = PyTuple_New(3);
PyTuple_SetItem(t, 0, PyLong_FromLong(1L));
PyTuple_SetItem(t, 1, PyLong_FromLong(2L));
PyTuple_SetItem(t, 2, PyString_FromString("three"));
杩欎竴镣瑰湪鍒氩紑濮嫔紑宸ョ殑镞跺栾糠𨱍戜简寰堜箙銆
4. 灏呜佽緭鍑虹殑镓链夊嚱鏁版斁鍏ヤ竴涓鏁扮粍涓锛屾暟缁勭殑缁撴瀯鏄锛
struct PyMethodDef {
const char *ml_name; /* The name of the built-in function/method */
PyCFunction ml_meth; /* The C function that implements it */
int ml_flags; /* Combination of METH_xxx flags, which mostly
describe the args expected by the C func */
const char *ml_doc; /* The __doc__ attribute, or NULL */
};
鏁扮粍浠{NULL, NULL}缁撴潫
5. 鏋勯犱竴涓狿ython import镞跺埯濮嫔寲镄勫嚱鏁
绫讳技
PyMODINIT_FUNC
initexample(void)
{
Py_InitMole("example", example_methods);
}
杩欓噷链変釜鐗瑰埆闇瑕佹敞镒忕殑鏄锛屽埯濮嫔寲鍑芥暟钖嶅瓧链変弗镙艰佹眰锛宨nit钖庨溃蹇呴’璺熸ā鍧楀悕锛屽惁鍒橮ython镓句笉鍒扮‘瀹氱殑鍑芥暟浼氭姤娌℃湁鍒濆嫔寲鍑芥暟镄勯敊璇

镓╁𪾢妯″潡鍐椤畬钖庯纴缂栬疟鎴愬姩镐佸簱锛圥ython瑕佹眰姝ゅ姩镐佸簱钖嶅瓧涓簆yd,瀹为檯灏辨槸鏀逛釜钖庣紑钥屽凡锛夈傚氨鍙浠ョ洿鎺ュ湪Python鑴氭湰涓鐢╥mport镄勬柟寮忓姞杞戒简锛屽逛簬浣跨敤𨱒ヨ达纴镙规湰涓嶉渶瑕佺煡阆撴ゅ簱鏄鐢– API镓╁𪾢鍐欑殑杩樻槸鐩存帴鐢≒ython璇鍙ュ啓镄勶纸杩欑偣Lua锅氱殑涔熸槸涓镙峰ソ锛
链钖庯纴python镄勬簮浠g爜涓闄勫甫浜嗕竴涓鍙锅欤xample_nt镄勪緥瀛愶纴鍙浠ュ弬钥冧竴镙凤纴瀹屾暣镄勬墿灞曚唬镰佸备笅锛
#include "Python.h"

static PyObject *
ex_foo(PyObject *self, PyObject *args)
{
printf("Hello, world/n");
Py_INCREF(Py_None);
return Py_None;
}

static PyMethodDef example_methods[] = {
{"foo", ex_foo, METH_VARARGS, "foo() doc string"},
{NULL, NULL}
};

PyMODINIT_FUNC
initexample(void)
{
Py_InitMole("example", example_methods);
}

浜岋紟C璇瑷涓璋幂敤Python璇鍙
棣栧厛锛寁oid Py_Initialize()鐢ㄦ潵鍒濆嫔寲锛寁oid Py_Finalize()鐢ㄦ潵缁撴潫Python镄勮皟鐢锛岃繖鏄蹇呴’瑕佺殑銆
鐕幂伀鍒嗕袱绉嶆儏鍐碉纴锅囧备粎浠呮槸鍑犳浔璇鍙ョ殑璇濓纴闾d箞浠PyRun_涓哄墠缂镄勪竴浜涘嚱鏁伴兘寰埚ソ鐢锛屾瘆濡
int PyRun_SimpleString(const char *command)
鍑芥暟灏卞彲浠ョ洿鎺ユ墽琛屼竴𨱒char*镄凯ython璇鍙ャ
闇瑕佽幏寰楄繑锲炲煎缑璇
PyObject* PyRun_String(const char *str, int start, PyObject *globals, PyObject *locals)
涔熷緢濂界敤锛屼互涓娄袱涓鍑芥暟鐢ㄦ潵澶勭悊Python婧愪唬镰佸凡缁忚诲叆鍐呭瓨镄勬儏鍐碉纴鍦ㄦ枃浠朵腑镄勬椂鍊
int PyRun_SimpleFile(FILE *fp, const char *filename)
PyObject* PyRun_File(FILE *fp, const char *filename, int start, PyObject *globals, PyObject *locals)
浣跨敤绫讳技銆备笉澶氲蹭简銆
锅囧傛槸涓妯″潡镄勮瘽锛堟瘆濡备竴涓鍑芥暟锛夛纴甯屾湜鍦–璇瑷涓璋幂敤镄勮瘽闾d箞浣跨敤璧锋潵灏辩◢寰澶嶆潅浜嗕竴镣广傝繖绉嶆儏鍐电殑闇瑕佸湪浜庝綘鍙浠ヤ粠C璇瑷涓钖慞ython鍑芥暟涓浼犲叆鍙傛暟骞朵笖镓ц岋纴铹跺悗銮峰彇缁撴灉銆
姝ゅ勫张鍒嗕负鍑犵嶆儏鍐碉细
鍦ㄦ枃浠朵腑锛屽湪鍐呭瓨涓锛岀紪璇戣繃镄勶纴婧愪唬镰併
鍦ㄦ枃浠朵腑閮藉緢濂借В鍐筹纴鍜屼笂闱涓镙枫傝繖閲屼富瑕佽插湪鍐呭瓨涓镄勬儏鍐点傦纸浜嫔疄涓婃垜宸ヤ綔涓闇瑕佸苟涓旇楄垂浜嗗緢闀挎椂闂存墠镓惧埌瑙e喅鏂规硶镄勫氨鏄杩欑嶆儏鍐碉级
链缂栬疟镞讹细锛堜篃灏辨槸婧愪唬镰侊级
1.阃氲繃
PyObject* Py_CompileString(const char *str, const char *filename, int start)
API棣栧厛缂栬疟涓娆°傛API镄勫弬鏁版垜璇存槑涓涓嬶纴str灏辨槸鍐呭瓨涓镄勬簮浠g爜锛宖ilename涓昏佹槸鍑洪敊镞舵姤阌栾鐢ㄧ殑锛屼簨瀹炴祴璇曡瘉鏄庯纴浣犻殢镒忕粰涓瀛楃︿覆涔熸病链夊叧绯伙纴浣嗙粰NULL鍙傛暟鍦ㄨ繍琛屾椂蹇呯劧鎶ラ敊銆俿tart鎴戜竴鑸鐢ㄧ殑鏄疨y_file_input锛屽洜涓虹殑纭鏄浠庢枃浠朵腑璇诲彇杩囨潵镄勶纴鐩稿圭殑杩樻湁Py_single_input鐢ㄦ潵琛ㄧず涓𨱒¤鍙ワ纴Py_eval_input镄勭敤娉曟垜涔熶笉鏄澶娓呮氥
婧愪唬镰侀氲繃姝ゅ嚱鏁拌皟鐢ㄥ悗锛岃幏寰楃紪璇戝悗镄凯yObject*,锛埚叾瀹炲亣濡傝窡杩涙簮浠g爜涓铡荤湅锛屾槸涓涓狿yCodeObject缁撴瀯锛夊亣璁惧懡钖崭负lpCode銆
2.姝ゆ椂鍐嶈皟鐢ˋPI
PyObject* PyImport_ExecCodeMole(char *name, PyObject *co)
瀵煎叆妯″潡銆傚弬鏁颁篃璇存槑涓涓嬶纴name涓哄煎叆镄勬ā鍧楀悕锛宑o灏辨槸鍓嶉溃缂栬疟杩囩殑浠g爜瀵硅薄锛坙pCode锛夈傝繑锲炵殑灏辨槸妯″潡瀵硅薄浜嗭纴锅囱惧懡钖崭负lpMod銆
3.鍐嶈皟鐢ˋPI
PyObject* PyObject_GetAttrString(PyObject *o, const char *attr_name)
銮峰缑鍑芥暟瀵硅薄銆俹灏辨槸妯″潡瀵硅薄锛坙pMod锛,attr_name灏辨槸浣犳兂瑕佽皟鐢ㄧ殑鍑芥暟钖崭简锛屽亣璁惧彨main镄勫嚱鏁帮纴灏辨槸钬漨ain钬濓纴铹跺悗杩斿洖镄勫氨鏄鍑芥暟瀵硅薄锛屽亣璁惧懡钖崭负lpFun銆
4.姝ゆ椂鍙浠ョ敤API
int PyCallable_Check(PyObject *o)
铡绘镆ヤ竴涓嬫槸涓嶆槸銮峰缑浜嗕竴涓鍑芥暟銆傚亣濡傜‘瀹氱殑璇濓纴灏卞彲浠ョ洿鎺ョ敤
PyObject_Call寮澶寸殑涓镞忓嚱鏁拌皟鐢╨pFun浜嗐傝繖浜涘嚱鏁板寘𨰾寰埚氾纴涓鑸灏辨槸杈揿叆鍙傛暟镄勪笉钖岋纴浣嗘槸鏁堟灉閮芥槸涓镙风殑锛屽氨鏄璋幂敤鍑芥暟钥屽凡銆傚弬鏁颁竴鑸鍙浠ラ氲繃鍓嶉溃璇磋繃镄刡uild鍑芥暟𨱒ヨ幏寰楋纴杩斿洖鍊间篃鏄銮峰缑涓涓狿yObject*,鍙浠ラ氲繃PyArg_闾d釜鍑芥暟𨱒ヨ幏鍙栵纴浣嗘槸濂藉儚涓嶅お濂斤纴闾f槸鍒嗘瀽鍙傛暟鐢ㄧ殑銆傛帹钻愮敤纭瀹氱被鍨嬶纸锅囱句负type锛夌殑绫讳技Py[type]_As镄勫嚱鏁版潵銮峰彇銆
姣斿傦细
long PyLong_AsLong(PyObject *pylong)銮峰彇long
double PyLong_AsDouble(PyObject *pylong)銮峰彇double

杩欓噷𨱍宠寸殑鏄锛屽簲璇ユ湁鐩存帴浠庢簮浠g爜涓銮峰彇鍑芥暟璋幂敤瀵硅薄镄勬柟寮忥纴浣嗘槸鎴戞湰浜烘病链夎瘯鍑烘潵锛屾湁浜虹煡阆撹蜂竴瀹氲祼鏁欙紒

缂栬疟杩囩殑浠g爜锛
瀵逛簬缂栬疟杩囩殑浠g爜鍜屼笂闱㈠氨鏄銮峰缑缂栬疟钖庣殑PyCodeObject瀵硅薄,褰撶劧鍦ㄦ簮浠g爜涓琛ㄧず杩樻槸PyObject*镄勬柟娉曚笉钖岋纸涓娄緥涓镄刲pCode锛夈
褰撶劧瑕佹兂浠ュ悗銮峰缑涓涓缂栬疟钖庣殑lpCode,镊铹惰佸厛缂栬疟涓涓嫔暒銆备絾鏄绾绮圭紪璇戞垚pyc缁揿熬镄勬枃浠跺悗锛岀洿鎺ヨ诲叆鍐呭瓨锛屾垜娌℃湁镓惧埌灏嗗叾杞鍖栦负PyCodeObject瀵硅薄镄勬柟娉曪纸涔熷笇链涙湁浜虹煡阆撹兘锻婅瘔鎴戯紒锛

鎴戞垒鍒扮殑鏂规硶鏄鍏堢敤
PyObject* PyMarshal_WriteObjectToString(PyObject *value, int version)
void PyMarshal_WriteLongToFile(long value, FILE *file, int version)
涓や釜鍑芥暟鍏堟妸PyCodeObject瀵硅薄(lpCode)搴忓垪鍖栧埌鏂囦欢鎴栬呭唴瀛树腑銆
鍐嶅湪闇瑕佺殑镞跺欑敤鍑芥暟
PyObject* PyMarshal_ReadObjectFromFile(FILE *file)
PyObject* PyMarshal_ReadObjectFromString(char *string, Py_ssize_t len)
璇诲嚭𨱒ワ纴璇诲嚭𨱒ョ殑PyObject*鍏跺疄灏辨槸𨱍宠佺殑PyCodeObject瀵硅薄浜(lpCode)銆傛帴涓嬫潵镄勬ラや笌链缂栬疟镞剁殑姝ラや竴镙枫
鍏夋槸杩欎釜镓镟茬殑鏂规硶鎴戣缮鏄鍙傝冭佹荤粰镄勫崐杈硅祫鏂椤弽澶岖爷绌跺嚭𨱒ョ殑銆傝岀湡姝g洿鎺ユ湁鏁堢殑鏂规硶鎴戣缮鏄娌℃湁镓惧埌銆

c语言中调用一个函数,被调用的函数只能有一个返回值

所谓函数,在离散数学里的定义就是具有单值性的关系。我用过c和python,他们的函数都是符合离散数学定义的,也就是说只有一个返回值。但是,c的函数可以返回指针,这就意味着你可以返回一个数组或者链表,相当于返回了多个值。

㈣ python return用法

return语句就是把执行结果返回到调用的地方,并把程序的控制权一起返回。

Python解释器易于扩展,可以使用C或C++(或者其他可以通过C调用的语言)扩展新的功能和数据类型。Python 也可用于可定制化软件中的扩展程序语言。Python丰富的标准库,提供了适用于各个主要系统平台的源码或机器码。

2021年10月,语言流行指数的编译器Tiobe将Python加冕为最受欢迎的编程语言,20年来首次将其置于Java、C和JavaScript之上。

相关内容:

Python专用的科学计算扩展库就更多了,例如如下3个十分经典的科学计算扩展库:NumPy、SciPy和matplotlib,它们分别为Python提供了快速数组处理、数值运算以及绘图功能。

因此Python语言及其众多的扩展库所构成的开发环境十分适合工程技术、科研人员处理实验数据、制作图表,甚至开发科学计算应用程序。2018年3月,该语言作者在邮件列表上宣布Python 2.7将于2020年1月1日终止支持。

热点内容
亚马逊上传工具 发布:2024-11-16 00:49:10 浏览:353
头脑王者源码 发布:2024-11-16 00:47:28 浏览:347
如何刷出纯净的安卓 发布:2024-11-16 00:35:41 浏览:377
sqlinsertupdate 发布:2024-11-16 00:34:45 浏览:123
金士顿新版存储卡好不好 发布:2024-11-16 00:34:35 浏览:887
数据库的介绍 发布:2024-11-16 00:24:28 浏览:966
我的世界服务器空岛如何重来 发布:2024-11-16 00:07:01 浏览:68
惠普云服务器哪家最好 发布:2024-11-16 00:01:36 浏览:353
ubuntu编译arm 发布:2024-11-15 23:58:33 浏览:620
excel隐藏工作表加密 发布:2024-11-15 23:55:41 浏览:451