for循环在python中的结束位置

时间:2013-03-16 15:55:37

标签: python if-statement for-loop

如果我有这个代码示例:

for s,d in grid_values(grid).items():
    if d in digits and not assign(values, s, d):
        return False ## (Fail if we can't assign d to square s.)
return values

我怎么知道结束的地方?因为据我所知,你可以把这一切写成一行。

2 个答案:

答案 0 :(得分:6)

for循环在缩进后退到与for语句相同或更低的行结束。

在您的示例中,即return values语句。

if语句变为True并执行return False语句时,循环也将终止;该函数在该点返回'early',并忽略循环的其余部分。

如上所述,您无法将代码减少到一行,因为您无法在一行上组合多个复合语句(带有缩进代码块的语句)。您可以使用带有生成器表达式的any()函数调用将此减少为两行,替换for语句,但我认为这不会提高可读性:

if any(not assign(values, s, d) for s, d in grid_values(grid).items() if d in digits):
    return False
return values

然后你可以用条件表达式将所有 塞进一行,以破坏可读性:

return False if any(not assign(values, s, d) for s, d in grid_values(grid).items() if d in digits) else values

不要那样做..

答案 1 :(得分:3)

如果grid_values(grid).items() d in digits and not assign(values, s, d)d位于digits且函数assign(values, s, d)返回False,则循环结束于return

这是因为returns语句会停止一个函数,所以循环(必须在函数中因为它有{{1}})才会因函数结束而中断。