如果我有这个代码示例:
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
我怎么知道结束的地方?因为据我所知,你可以把这一切写成一行。
答案 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}})才会因函数结束而中断。