在Python扩展程序中解压缩可迭代

杰西·K

我正在尝试转换a, b, c, d = iterable为Python的C / API。

我正在寻找类似于的函数PyArg_ParseTuple,仅用于可迭代对象。

换句话说,如果存在此类功能,则PyIter_Parse区域内PyObject_ParseIterable

有什么秘诀如何实现呢?

马丁·彼得斯(Martijn Pieters)

不,没有可以帮助您完成此任务的帮助程序功能。

您将不得不花费PyIter_Next()最多的max时间来检索值,在无法获取至少一个值时引发异常min,然后仅从中构建一个元组。

诸如此类(未经测试,大部分是从窃取的PySequence_Tuple()):

int
PyIter_LimitedTuple(PyObject *v, Py_ssize_t min, Py_ssize_t max)
{
    PyObject *it;  /* iter(v) */
    PyObject *result = NULL;
    Py_ssize_t j;

    it = PyObject_GetIter(v);
    if (it == NULL)
        return NULL;

    /* allocate space. */
    result = PyTuple_New(max);
    if (result == NULL)
        goto Fail;

    /* Fill the tuple. */
    for (j = 0; ; ++j) {
        PyObject *item = PyIter_Next(it);
        if (item == NULL) {
            if (PyErr_Occurred())
                goto Fail;
            break;
        }

        if (j > max) {
            PyErr_Format(PyExc_ValueError,
                "too many values to unpack");
            goto Fail;
        }

        PyTuple_SET_ITEM(result, j, item);
    }

    if (j < min) {
        PyErr_Format(PyExc_ValueError,
            "need more than %d value to unpack",
            j);
        goto Fail;
    }

    /* Cut tuple back if fewer than max items were available. */
    if (j < max &&
        _PyTuple_Resize(&result, j) != 0)
        goto Fail;

    Py_DECREF(it);
    return result; 

Fail:
    Py_XDECREF(result);
    Py_DECREF(it);
    return NULL;
}

然后将生成的元组传递给PyArg_UnpackTuple()

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

多个for循环迭代器可在Python中解压缩

来自分类Dev

多个for循环迭代器可在Python中解压缩

来自分类Dev

Chrome解压缩的扩展程序消失

来自分类Dev

python3中的扩展序列解压缩

来自分类Dev

Python中的结构和解压缩

来自分类Dev

在python中解压缩大列表

来自分类Dev

在Python中解压缩列表

来自分类Dev

在Python中解压缩字典列表

来自分类Dev

返回python中的解压缩列表

来自分类Dev

解压缩python中的枚举zip

来自分类Dev

在python中解压缩大列表

来自分类Dev

如何使用解压缩的扩展程序启动Chrome?

来自分类Dev

以编程方式加载解压缩的Chrome扩展程序

来自分类Dev

以编程方式加载解压缩的Chrome扩展程序

来自分类Dev

我如何使我的Python程序解压缩压缩的文件?

来自分类Dev

如何在python中迭代和解压缩“.gz”文件?

来自分类Dev

Python-无法解压缩不可迭代的int对象

来自分类Dev

Python:TypeError:无法解压缩不可迭代的int对象

来自分类Dev

Python TypeError:无法解压缩不可迭代的布尔对象

来自分类Dev

WinApi压缩,python3中的解压缩

来自分类Dev

如何解压缩迭代器?

来自分类Dev

Python元组解压缩

来自分类Dev

解压缩LINQ中的压缩列表

来自分类Dev

压缩/解压缩内存中的数据

来自分类Dev

在Python中解压缩给定数量的项目?

来自分类Dev

如何在Python中解压缩列表或元组?

来自分类Dev

将值解压缩为python中的多个变量

来自分类Dev

python ValueError:太多值无法在元组中解压缩

来自分类Dev

如何在Python中解压缩嵌套的DBRef?