for
循環(huán)還有一個(gè)else
從句,我們大多數(shù)人并不熟悉。這個(gè)else
從句會(huì)在循環(huán)正常結(jié)束時(shí)執(zhí)行。這意味著,循環(huán)沒有遇到任何break
. 一旦你掌握了何時(shí)何地使用它,它真的會(huì)非常有用。我自己對(duì)它真是相見恨晚。
有個(gè)常見的構(gòu)造是跑一個(gè)循環(huán),并查找一個(gè)元素。如果這個(gè)元素被找到了,我們使用break
來中斷這個(gè)循環(huán)。有兩個(gè)場(chǎng)景會(huì)讓循環(huán)停下來。
break
被觸發(fā)。現(xiàn)在我們也許想知道其中哪一個(gè),才是導(dǎo)致循環(huán)完成的原因。一個(gè)方法是先設(shè)置一個(gè)標(biāo)記,然后在循環(huán)結(jié)束時(shí)打上標(biāo)記。另一個(gè)是使用else
從句。
這就是for/else
循環(huán)的基本結(jié)構(gòu):
for item in container:
if search_something(item):
# Found it!
process(item)
break
else:
# Didn't find anything..
not_found_in_container()
考慮下這個(gè)簡(jiǎn)單的案例,它是我從官方文檔里拿來的:
for n in range(2, 10):
for x in range(2, n):
if n % x == 0:
print(n, 'equals', x, '*', n / x)
break
它會(huì)找出2到10之間的數(shù)字的因子。現(xiàn)在是趣味環(huán)節(jié)了。我們可以加上一個(gè)附加的else語句塊,來抓住質(zhì)數(shù),并且告訴我們:
for n in range(2, 10):
for x in range(2, n):
if n % x == 0:
print(n, 'equals', x, '*', n / x)
break
else:
# loop fell through without finding a factor
print(n, 'is a prime number')