中结束。如果我得到这个代码示例:哪里呢for循环蟒蛇
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 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
我怎么能知道其中的结束?因为据我所知,你可以把所有这些写在一行中。
环路在grid_values(grid).items()
,或者如果年底结束d in digits and not assign(values, s, d)
:如果d
在digits
中,并且功能assign(values, s, d)
返回False
。
发生这种情况是因为return
语句停止了一个函数,因此函数结束后,循环(必须在函数中,因为它有returns
)被强制中断。
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
不要做..
http://docs.python.org/2/tutorial/controlflow.html#for-statements – ChrisW 2013-03-16 15:57:18
http://docs.python.org/2/reference/lexical_analysis.html#indentation – 2013-03-16 15:57:48
你无法写所有这一切在一行。 Python语法不允许将块嵌入单行内的块中。 – user4815162342 2013-03-16 15:59:09