【发布时间】:2019-12-01 18:14:39
【问题描述】:
我正在构建一个极小极大函数,需要对每次迭代进行一些检查。我希望迭代尽可能高效,以便能够增加搜索深度,因此想知道 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 使用短路评估,所以没关系:如果第一个条件为假,则不评估其余条件。但是你也可以为你的函数的不同版本计时,例如使用 Ipython 的
%timeit魔法。
标签: python for-loop if-statement minimax