如果我得到这个代码示例:
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
我怎么知道 for 在哪里结束?因为据我所知,您可以在一行中写下所有这些内容。
请您参考如下方法:
for 循环在缩进回到与 for 语句相同或更低级别的行结束。
在您的示例中,这是在 return values 语句中。
当if语句变为True并执行return False语句时,循环也会终止;该函数在该点返回“早”,循环的其余部分将被忽略。
如所写,您不能将代码减少到一行,因为您不能在一行中组合多个复合语句(采用缩进代码块的语句)。您可以使用带有生成器表达式的 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
不要那样做..
