首页 > 解决方案 > range 如何是惰性序列而不是 Python 中的生成器?

问题描述

我听说 range 是一个发电机,后来我意识到它不是通过这个有用的帖子。虽然这篇文章彻底解释了该__contains__方法如何在恒定时间内工作,但我无法找到任何有关如何创建惰性序列的源代码参考。我试图自己破译源代码,但只有 C 的基本知识,我很挣扎。我相信下面的代码片段是__iter__范围内的工作方式(如果我错了,请纠正我) - 你能解释一下惰性序列是如何在这里实现的吗?它与生成器的惰性序列有什么不同吗?

range_iter(PyObject *seq)
{
    rangeobject *r = (rangeobject *)seq;
    longrangeiterobject *it;
    long lstart, lstop, lstep;
    PyObject *int_it;

  long_range:
    it = PyObject_New(longrangeiterobject, &PyLongRangeIter_Type);
    if (it == NULL)
        return NULL;


    it->start = r->start;
    it->step = r->step;
    it->len = r->length;
    it->index = _PyLong_Zero;
    Py_INCREF(it->start);
    Py_INCREF(it->step);
    Py_INCREF(it->len);
    Py_INCREF(it->index);
    return (PyObject *)it;
}

标签: pythonpython-3.xrangegeneratorlazy-sequences

解决方案


推荐阅读