![](/img/trans.png)
[英]What is the correct way (syntax) of combining boolean operators in python
[英]What is the “correct” way to pass a boolean to a Python C extension?
這是python文檔(http://docs.python.org/extending/extending.html)中的一個簡單示例:
static PyObject *
spam_system(PyObject *self, PyObject *args)
{
const char *command;
int sts;
if (!PyArg_ParseTuple(args, "s", &command))
return NULL;
sts = system(command);
return Py_BuildValue("i", sts);
}
如果我想將另一個布爾參數傳遞給函數 - 這是什么“正確”的方法呢?
似乎沒有傳遞給PyArg_ParseTuple()的bool選項。 所以我想到了以下幾點:
這些中哪一個更好? 其他選擇?
4也許有一種方法可以獲得任何類型的變量並獲得其真值(即空數組將是假數據等),這是python函數通常所做的。
是的:(來自Python / C API參考 )
int PyObject_IsTrue(PyObject *o)
如果對象o被認為是真,則返回1,否則返回0。 這相當於Python表達式而不是o。 失敗時,返回-1。
編輯。 為了回答實際問題,我認為方法1是正確的,因為int實際上是C中的相應類型。方法4很好,但如果你將你的函數記錄為bool,你沒有義務接受任何對象。 在Python中,沒有理由的顯式類型檢查在3中是不受歡迎的。 像2中一樣轉換為另一個Python對象對您的C代碼沒有幫助。
我找到了另一種方法:
PyObject* py_expectArgs;
bool expectArgs;
PyArg_ParseTupleAndKeywords(args, keywds, (char *)"O!", (char **)kwlist, &PyBool_Type, &py_expectArgs);
expectArgs = PyObject_IsTrue(py_expectArgs);
如果錯誤的參數調用有“自動”異常“參數1必須是bool,而不是int”
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.