我已经到处寻找,但我找不到一个使用元组(包含可选参数)和关键字的
假设我要解析以下参数:
我在其他地方寻找帮助,但并没有找到太多有用的资料:
PyArg_ParseTupleAndKeywords()
的示例。我发现最接近的是这个问题,但答案并不特别有用。大多数示例似乎将关键字作为可选参数,但似乎元组也应该能够包含可选参数。假设我要解析以下参数:
- 双精度数组的numpy数组(必填)
- 双精度数组的numpy数组(可选,无关键字)
- 可选的关键字参数:
- k1 = > numpy数组中的双精度数组
- k2 = >整数
- k3 = >双精度浮点数
- k4 = > Python类实例
static PyObject* pymod_func(PyObject* self, PyObject* args, PyObject* kwargs) {
static char* keywords[] = {"k1", "k2", "k3", "k4", NULL};
PyObject *arg1, *arg2, *k1, *k4
PyObject *arr1, *arr2, *karr1;
double *k3;
int *k2;
PyArg_ParseTupleAndKeywords(args, kwargs, "O!|O!OidO", keywords, &arg1, &PyArray_Type, &arg2, &PyArray_Type, &k1, &PyArray_Type, &k2, &k3, &k4);
arr1 = PyArray_FROM_OTF(arg1, NPY_FLOAT64, NPY_ARRAY_INOUT_ARRAY);
if (arr1 == NULL) return NULL;
arr2 = PyArray_FROM_OTF(arg1, NPY_FLOAT64, NPY_ARRAY_INOUT_ARRAY);
// no null check, because optional
karr1 = PyArray_FROM_OTF(k1, NPY_FLOAT64, NPY_ARRAY_INOUT_ARRAY);
// again, no null check, because this is optional
// do things with k3, k2, and k4 also
return NULL;
}
我在其他地方寻找帮助,但并没有找到太多有用的资料:
- https://docs.python.org/2/extending/extending.html
- https://docs.python.org/2/c-api/arg.html
- http://docs.scipy.org/doc/numpy-1.10.1/user/c-info.how-to-extend.html
PyArg_ParseTupleAndKeywords()
的适当方法是什么?