中結束。如果我得到這個代碼示例:哪裏呢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