python - 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;
}
解决方案
推荐阅读
- java - 在 Java 中分析和导入 EEG 信号
- laravel - Laravel 队列:作业有时会执行两次或三次
- javascript - 在嵌入式 Calendly 小部件中安排事件时如何运行代码?
- elasticsearch - 启用 elasticsearch 安全功能后 Elasticsearch.service 失败
- python-2.7 - 是否可以通过在 Tkinter 中读取保存的文件来创建按钮
- javascript - 如何使用 Krpano 中 db/json 源中的 lat、long 值动态添加热点
- ios - Nativescript 应用程序在 iOS 14 上是否存在问题?
- javascript - npm "这个版本的 'buffer' 已经过时了。" 您必须更新到 v4.9.2 或更高版本
- python - 在模拟配置时使用 python 单元测试中的固定输入端到端测试 Airflow DAG
- jdbc - Kafka 连接器:如何使用 OR 运算符和递增列执行查询?