在 python 3 中,range 支持索引,但我想知道它到底是如何工作的。
例如:范围(100000000000000000000000000)[-1]
我有一个基本的理解,range函数实际上返回的是一个占用内存有限的range对象。这是否意味着要获得最后一个值,它必须计算所有先前的值?
最佳答案
获取上一个值不需要获取前一个值。
它由 compute_item
function 计算得出(由 compute_range_item
<- range_item
... 调用)。
来自 Python 3.3 源代码 (Objects/rangeobjects.c)
static PyObject *
compute_item(rangeobject *r, PyObject *i)
{
PyObject *incr, *result;
/* PyLong equivalent to:
* return r->start + (i * r->step)
*/
incr = PyNumber_Multiply(i, r->step);
if (!incr)
return NULL;
result = PyNumber_Add(r->start, incr);
Py_DECREF(incr);
return result;
}
关于python - 使用索引时范围是否必须计算所有以前的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19494933/