首页 > 解决方案 > 为什么python必须生成完整范围来测试是否在范围内浮动?

问题描述

这真的很快:

1 in range(100000000000000)

这真的很慢:

1.5 in range(100000000000000)

为什么必须生成完整范围才能知道1.5何时range(X)必须step是整数?

标签: pythonpython-3.x

解决方案


如果我们检查源代码

包含函数:

range_contains(rangeobject *r, PyObject *ob)
{
    if (PyLong_CheckExact(ob) || PyBool_Check(ob))
        return range_contains_long(r, ob);

    return (int)_PySequence_IterSearch((PyObject*)r, ob,
                                   PY_ITERSEARCH_CONTAINS);
}

它似乎检查是否将使用整数或布尔方法进行检查,如果不是,则使用 PY_ITERSEARCH_CONTAINS。


推荐阅读