在Python中,范围如何是一个惰性序列而不是生成器?

2024-09-29 23:31:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我听说range是一个发电机,后来我意识到它不是通过this helpful post。虽然这篇文章详细解释了__contains__方法如何在恒定时间内工作,但我找不到任何关于如何创建惰性序列的源代码参考。我试图自己破译这个source code,但由于只有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;
}

Tags: pyreturnsteprangeit序列startnull

热门问题