Как дальность ленивая последовательность, но не генератор в Python? - PullRequest
2 голосов
/ 08 января 2020

Я слышал, что диапазон был генератором, потом я понял, что это не через этот полезный пост . Хотя этот пост подробно объясняет, как метод __contains__ работает в постоянное время, я не смог найти никаких ссылок на исходный код о том, как создается ленивая последовательность. Я пытался расшифровать исходный код сам, но, имея только базовые c знания в 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...