python - 使用索引时范围是否必须计算所有以前的值

标签 python python-3.x

在 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/

相关文章:

utf-8 中的 python jsonify 字典

python - 测试两个 numpy 数组是否(接近)相等,包括形状

python - 如何通过python计算属于字符串列表的每个字符串长度?

python-3.x - git clone fatal error - 存储库 'https' 不存在

python - 帮助解决 Python 循环怪异问题?

python - 模板内的 Django Cookie 值

python - 如何以编程方式更新选定的源索引?

python - pyenv 使用正确的 python 版本但使用错误的库文件夹

python-3.x - 使用 Django 序列化程序类保存嵌套数据

python - 为什么 turtle 会照亮像素?