如何使用 PyArg_ParseTupleAndKeywords 来解析具有可选参数和关键字的元组?

2024-04-20

我到处都找过,但找不到例子PyArg_ParseTupleAndKeywords()与元组一起使用 — 包含可选参数 —and关键词。我发现的最接近的是这个问题 https://stackoverflow.com/questions/10625865/how-does-pyarg-parsetupleandkeywords-work/10625987#10625987,但答案并不是特别有帮助。大多数示例似乎都将关键字作为可选参数,但元组似乎也应该能够包含可选参数。

假设我正在尝试解析以下参数:

  • numpy 双精度数组(强制)
  • numpy 双精度数组(可选,无关键字)
  • optional keyword arguments:
    • 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/extending/extending.html
  • https://docs.python.org/2/c-api/arg.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 http://docs.scipy.org/doc/numpy-1.10.1/user/c-info.how-to-extend.html

正确的使用方法是什么PyArg_ParseTupleAndKeywords()?


从 Python 3.3 开始,您可以使用$在格式字符串中表明其余参数仅包含关键字 https://docs.python.org/3/c-api/arg.html#other-objects,从 Python 3.6 开始,您可以指定仅位置参数 https://docs.python.org/3/c-api/arg.html#c.PyArg_ParseTupleAndKeywords通过在中使用空名称keywords争论。

因此,在足够高版本的 Python 中,您可以使用如下代码:

static char* keywords[] = {"", "", "k1", "k2", "k3", "k4", NULL};

// [...]

PyArg_ParseTupleAndKeywords(args, kwargs,
                            "O!|O!$O!idO", keywords,
                            &PyArray_Type, &arg1, &PyArray_Type, &arg2,
                            &PyArray_Type, &k1, &k2, &k3, &k4);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 PyArg_ParseTupleAndKeywords 来解析具有可选参数和关键字的元组? 的相关文章

  • Enthought Python 中的线程 FFT

    Numpy SciPy 中的快速傅立叶变换 FFT 不是线程化的 Enthought Python 附带 Intel MKL 数值库 该库能够进行线程 FFT 如何获得这些例程 以下代码适用于 Windows 7 Ultimate 64 位
  • Pytorch 损失为 nan

    我正在尝试用 pytorch 编写我的第一个神经网络 不幸的是 当我想要得到损失时遇到了问题 出现以下错误信息 RuntimeError Function LogSoftmaxBackward0 returned nan values in
  • 如何在代码中停止 autopep8 未安装消息

    我是一名新的 Python 程序员 使用 Mac 版本的 VS Code 1 45 1 创建 Django 项目 我安装了 Python 和 Django 扩展 每次我保存 Django 文件时 代码都会弹出此窗口 Formatter au
  • 从 SQL Server 中调用 Python 文件

    我的文件名中有 Python 脚本 C Python HL py 在此 Python 脚本中 有预测模型以及对 SQL 数据库中某些表的更新 我想将此文件称为 SQL 作业 我怎样才能做到这一点 这个问题不一样 如何在 SQL Server
  • 通过 pyodbc 连接到 Azure SQL 数据库

    我使用 pyodbc 连接到本地 SQL 数据库 该数据库工作正常 SQLSERVERLOCAL Driver SQL Server Native Client 11 0 Server localdb v11 0 integrated se
  • 映射器无法组装任何主键列

    我从 sqlite 表创建了一个临时表 该表是基于各种选择标准的原始表的子集 屏幕截图中有一个示例 我试图一次循环一个表记录 以便更新每个记录中的字段 我有 source table self source engine create en
  • python中remove方法的安全使用

    我从列表继承了一个 UserList 类并实现了以下方法来删除标记为已删除的条目 def purge deleted self for element in list iter self if ele mark deleted lt 1 s
  • 在Python中随机化列表[重复]

    这个问题在这里已经有答案了 我想知道是否有一个好方法来 震动 Python 中的项目列表 例如 1 2 3 4 5 可能会被动摇 随机化 3 1 4 2 5 任何顺序都同样可能 from random import shuffle list
  • 遍历 globals() 字典

    我 尝试 使用globals 在我的程序中迭代所有全局变量 我就是这样做的 for k v in globals iteritems function k v 当然 这样做时 我只是创建了另外 2 个全局变量 k and v 所以我得到这个
  • Python、cPickle、酸洗 lambda 函数

    我必须像这样腌制一组对象 import cPickle as pickle from numpy import sin cos array tmp lambda x sin x cos x test array tmp tmp tmp tm
  • 将 Matlab MEX 文件中的函数直接嵌入到 Python 中

    我正在使用专有的 Matlab MEX 文件在 Matlab 中导入一些仿真结果 当然没有可用的源代码 Matlab 的接口实际上非常简单 因为只有一个函数 返回一个 Matlab 结构体 我想知道是否有任何方法可以直接从Python调用M
  • captureWarnings 设置为 True 不会捕获警告

    我想记录所有警告 我以为这样的设定captureWarnings to True应该可以解决问题 但事实并非如此 代码 import logging import warnings from logging handlers import
  • 按多索引的一级对 pandas DataFrame 进行排序

    我有一个多索引 pandas DataFrame 需要按索引器之一进行排序 这是数据片段 gene VIM treatment dose time TGFb 0 1 2 0 158406 1 2 0 039158 10 2 0 052608
  • pip:证书失败,但curl 有效

    我们在客户端安装了根证书 https 连接适用于curl 但如果我们尝试使用pip 它失败 Could not fetch URL https installserver 40443 pypi simple pep8 There was a
  • 没有名为 urllib.parse 的模块(我应该如何安装它?)

    我正在尝试在 CentOS 7 上运行 REST API 我读到 urllib parse is in Python 3 但我使用的是 Python 2 7 5 所以我不知道如何安装此模块 我安装了所有要求 但仍然无法运行该项目 当我寻找
  • 计算素数并附加到列表

    我最近开始尝试使用 python 解决 Euler 项目的问题 并且在尝试计算素数并将其附加到列表中时遇到了这个障碍 我编写了以下代码 但我很困惑为什么它在运行时不输出任何内容 import math primes def isPrime
  • 对 Python 的 id() 感到困惑[重复]

    这个问题在这里已经有答案了 我可以理解以下定义 每个对象都有一个身份 类型和值 对象的身份 一旦创建就永远不会改变 你可能会认为它是 对象在内存中的地址 这is操作员比较身份 两个物体 这id 函数返回一个代表其值的整数 身份 我假设上面的
  • NumPy 数组不可 JSON 序列化

    创建 NumPy 数组并将其保存为 Django 上下文变量后 加载网页时收到以下错误 array 0 239 479 717 952 1192 1432 1667 dtype int64 is not JSON serializable
  • 使用 JSON 可序列化枚举自动生成棉花糖模式

    创建与我的模型相同的棉花糖模式的日子已经一去不复返了 我发现这个优秀的答案 https stackoverflow com a 42892443 4097322这解释了我如何使用简单的装饰器从 SQA 模型自动生成模式 因此我实现了它并替换
  • Windows 10 上的 Tensorflow 安装问题

    我正在尝试在 Win 10 计算机上安装 Tensorflow 我成功安装了Python 3 7 然后尝试按照tensorflow org上的安装说明进行操作 执行时 pip install tensorflow 我收到以下错误消息 错误

随机推荐