我如何使我的Python扩展需要其他论点
How do I make my Python extension take additional arguments?
考虑我从Python文档页面上找到的以下示例代码。现在需要一个论点。我想让它接受一个命名的参数,例如"模式= 2"。这样我就可以调用myext.do_something('/home/home/crypto/sosings.jpg',mode = 2)。使用模式传递的参数应该是一个整数,如果它得到其他内容,我希望它在Python中引起错误。我该怎么做?我认为我应该编辑module_functions [],但我不知道该放在那里。
#include <Python.h>
static PyObject *
do_something(PyObject *self, PyObject *args)
{
char *filename;
if (!PyArg_ParseTuple(args, "s", &filename))
return NULL;
char *result = do_somethingelse(filename);
return Py_BuildValue("s", result);
}
static PyMethodDef
module_functions[] = {
{ "do_something", do_something, METH_VARARGS, "do something" },
{ NULL }
};
PyMODINIT_FUNC
initmyext(void)
{
Py_InitModule("myext", module_functions);
}
这是一个最小示例:
#include <Python.h>
static PyObject *
do_something(PyObject *self, PyObject *args, PyObject *kwargs)
{
char *filename;
int mode = 2;
static char *keywords[] = {"filename", "mode", NULL};
if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s|i", keywords, &filename, &mode))
return NULL;
char *result = do_somethingelse(filename);
return Py_BuildValue("s", result);
}
static PyMethodDef
module_functions[] = {
{ "do_something", (PyCFunction)do_something, METH_VARARGS | METH_KEYWORDS, "do something" },
{ NULL }
};
PyMODINIT_FUNC
initmyext(void)
{
Py_InitModule("myext", module_functions);
}
相关文章:
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 是否可以通过C++扩展强制多个python进程共享同一内存
- static_assert在宏中,但也可以扩展到可以用作函数参数的东西
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- GL_SHADERSTORAGE_BUFFER位置是否与其他着色器位置冲突
- 为什么我不能在 C++ 中的特定函数重载中调用同一函数的任何其他重载?
- 如何将这个C++哈希表转换为动态扩展和收缩,而不是使用硬设置的最大值
- 在其他文件中创建类时在 c++ 项目中不起作用
- 扩展光电二极管探测器以支持多个传感器
- 类与私有变量的其他类之间的线程安全性
- 针对特殊情况,使用其他状态信息扩展基元类型
- 我如何使我的Python扩展需要其他论点
- 我应该使用SIMD还是向量扩展或其他什么
- 使用C++实验时忽略具有其他扩展名的文件的最佳方法<filesystem>?
- 在WinAPI、POSIX或API-OS等价物的其他扩展中,是否存在来自C++11的所有级别的内存屏障
- 扩展类以进行调试:公共API、隐藏实现或其他什么
- 其他类数据类型的扩展boost::lexical_cast
- 使用python扩展时链接到其他库(例如boost)
- 扩展std::vector以从其他vector类型移动元素