python - 为什么python必须生成完整范围来测试是否在范围内浮动?
问题描述
这真的很快:
1 in range(100000000000000)
这真的很慢:
1.5 in range(100000000000000)
为什么必须生成完整范围才能知道1.5
何时range(X)
必须step
是整数?
解决方案
如果我们检查源代码:
包含函数:
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。
推荐阅读
- python-3.x - flatpak add additional dependencies after install (QGIS)
- xcode - Xcode 创建跨多个目标的共享框架
- javascript - 我在 JavaScript 上找到“对象布局库”
- react-native - 出现错误:路由“书籍”的组件必须是 React 组件。例如:从 './MyScreen' 导入 MyScreen;
- javascript - 有没有办法可以实时跟踪网站源代码的类变化?
- c++ - 用 move 初始化 lambda 函数参数是个好主意吗?
- python - 使用 openpyxl 插入 xls 时将 CSV 格式保留在字符串中
- javascript - 每次通过我的循环时都希望 html/js 画布更新
- javascript - 侧面板滑入时修改主要内容的 CSS
- javascript - 上下文 Api 状态没有改变