for循环在python中的结束位置

dyl*_*ert 1 python for-loop if-statement

如果我得到这个代码示例:

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
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*ers 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
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用条件表达式将所有内容填充到一行中,从而破坏可读性:

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

不要那样做..