python - 最有效的带有 if 语句的 Python 循环
问题描述
我正在构建一个极小极大函数,需要对每次迭代进行一些检查。我希望迭代尽可能高效,以便能够增加搜索深度,因此想知道 Python if 语句在 for 循环中是如何工作的。让我给你一个简化的例子:
# Example 1
def test(x_start, y_start):
for xdir, ydir in [[1, -1], [1, 1], [-1, 1], [-1, -1]]:
x, y = x_start, y_start
x += xdir
y += ydir
if not is_on_board(x, y) and board[x][y].type == 'full':
continue
# Example 2
def test(x_start, y_start):
for xdir, ydir in [[1, -1], [1, 1], [-1, 1], [-1, -1]]:
x, y = x_start, y_start
x += xdir
y += ydir
if not is_on_board(x, y):
if not board[x][y].type == 'full':
continue
使用示例 2 是否更有效,因为它在某些情况下会跳过第一个 if 语句,基于该位置不在板上并且不必对板类型进行额外检查?
在我的真实代码中,有更多带有函数和变量检查的 and 语句,这可能相对耗时。因此,我想知道将 and 语句分解为示例 2 中的更多 if 语句是否更有效,或者它是否真的无关紧要?通常来说,一般来说。
解决方案
包括Python在内的大多数编程语言都会“短路”布尔逻辑检查——这意味着一旦知道真值,它们就不会继续评估。多个 if 语句或和/或语句之间的差异可以忽略不计,您应该考虑哪个更具可读性;另一方面,如果其中一些更昂贵或信息更丰富,则检查的顺序可能会有所不同。
推荐阅读
- javascript - 如何估计 REST 调用持续时间?
- javascript - 带有 3 个输入字段的 Javascript 数据库实时搜索
- android - 退订旧应用主题
- angular - 带有spring boot和angular的html文件中的dll文件
- javascript - Mapbox GL JS:在叠加层上分层道路/城市
- r - 尝试运行 RCyjs 示例时出现 BrowserViz 错误
- postgresql - 在 AWS 中使用 PGAdmin 备份 PostgreSql DB 时出错
- influxdb - InfluxDB:同一查询的响应时间更改
- redux - 更新reducer中嵌套对象的值时如何在spread中使用变量?
- facebook-opengraph - Facebook 无法识别的打开图形属性