这是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);
}
如果我想向函数传递一个额外的布尔参数,那么“正确”的方法是什么?
似乎没有bool选项可以传递给PyArg_ParseTuple()。所以我想到了以下几点:
有什么更好的吗?其他选择?
目前,解析整数(如
"i"
)是接受bool的公认方法。从Python 3.3中,
PyArg_ParseTuple
将接受"p"
(对于“谓词”),每the latest NEWS:注意,与
"p"
一起使用PyArg_ParseTuple
时,参数必须是(指向)int
的指针,而不是C99bool
类型:我找到了另一种方法:
如果参数调用错误,则存在“auto”异常“参数1必须是bool,而不是int”
是:(来自Python/C API Reference)
编辑。为了回答实际的问题,我认为方法1是正确的,因为int实际上是C中的对应类型。方法4是好的,但是如果您将您的函数记录为使用bool,您就没有义务只接受任何对象。在Python中,没有理由的显式类型检查与3中一样不受欢迎。像2中那样转换到另一个Python对象对C代码没有帮助。
相关问题 更多 >
编程相关推荐