亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

求Python達人幫我解釋一下,謝了

求Python達人幫我解釋一下,謝了

慕虎7371278 2023-01-03 19:15:15
Python中的PyArg_ParseTupleAndKeywords函數如何使用,尤其他的format參數,求教,謝謝
查看完整描述

1 回答

?
慕沐林林

TA貢獻2016條經驗 獲得超9個贊

當你的函數接受關鍵字參數,那么m_flags可設置為METH_VARARGS|METH_KEYWORDS,相應的使用PyArg_ParseTupleAndKeywords來進行參數解析。

函數 PyArg_ParseTupleAndKeywords() 聲明如下:

int PyArg_ParseTupleAndKeywords(PyObject* arg, PyObject* kwdict, char* format, char* kwlist[],...);
參數arg和format定義同 PyArg_ParseTuple() 。參數 kwdict 是關鍵字字典,用于接受運行時傳來的關鍵字參數。參數 kwlist 是一個NULL結尾的字符串,定義了可以接受的參數名,并從左到右與format中各個變量對應。如果執行成功 PyArg_ParseTupleAndKeywords() 會返回true,否則返回false并拋出異常。

注:嵌套的tuple在使用關鍵字參數時無法生效,不在kwlist中的關鍵字參數會導致 TypeError 異常

代碼

#include <Python.h>

static PyObject* foo_bar3(PyObject* self, PyObject* args, PyObject* kw) {
static char* kwlist[] = {"i", "d", "s",NULL};
int iNum = 0;
double fNum = 2.0f;
char* str = "thing";
if (!PyArg_ParseTupleAndKeywords(args,kw,"i|ds",kwlist,&iNum,&fNum,&str)) {
printf("ERROR");
return NULL;
}
printf("num is: %d,%f,%s/n",iNum,fNum,str);
Py_RETURN_NONE;
}
static PyMethodDef foo_methods[] = {
{"bar3", (PyCFunction)foo_bar3, METH_VARARGS|METH_KEYWORDS, NULL},
{NULL,NULL,0,NULL}
};

PyMODINIT_FUNC initfoo() {
Py_InitModule3("foo", foo_methods, "My first extension module.");
}
相應的在函數表里記錄如下:

{"foo_bar",(PyCFunction)foo_bar, METH_VARARGS|METH_KEYWORDS,NULL},
這樣你在python代碼中調用時可以傳遞關鍵字參數,其中只有i表示的整數是必需的,因此下述調用都是合法的:

import foo
foo.bar3(1)
foo.bar3(1,d=2.0)
foo.bar33(i=1,d=2.0)
而如果你傳遞了其他關鍵參數,則會報TypeError,比如foo.bar3(i=1,dd=3.0,s="fda")


查看完整回答
反對 回復 2023-01-06
  • 1 回答
  • 0 關注
  • 149 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號