大家一定非常熟悉else關鍵字語句,else通常是用來配合if語句使用的,但是在python的else語句並不只能用在if語句之後,還可以用在迴圈語句甚至try異常處理語句中,這雖然不是什麼秘密,但是很多人沒有發現它的好處。
for & else
預設情況下,只有當for迴圈語句正常執行後,最後才會執行else語句。
for i in
list
("abcdefg"):
print
(i)else
:print
("i am 'else' expression."
)# 輸出如下:
# a# b
# c# d
# e# f
# g# i am 'else' expression.
但是如果像下面這樣,迴圈語句裡出現了break語句或者return之類跳出去的語句的話,同時又符合被跳出去的條件,那麼else就不會被執行了,因為被提前跳出去了。但是被continue語句跳過是沒有任何問題的,因為最終還是會執行下去語句不會跳出執行體。
for i in
list
("abcdefg"):
print
(i)if i ==
"c":
break
else
:print
("i am 'else' expression."
)# 輸出如下:
# a# b
# c
那什麼時候用else合適呢,試想一種場景,我們要遍歷乙個元素列表,判斷列表中是否有奇數,如果存在就列印奇數存在,不存在就列印奇數不存在。對於這類判斷是否存在某個值的時候,我們都會考慮設定乙個flag開關來判斷,因為不設立flag判斷的話,像下面示例這樣直接在迴圈體內做判斷設定列印語句就會把每次判斷乙個元素的的結果都列印一遍,顯得十分多餘,也極不推薦和採納。
numbers =[2
,4,6
,8,10
]for n in numbers:
if n %2==
1:print
('odd exist'
)break
else
:print
('odd does not exist'
)# 輸出如下:
# odd does not exist
# odd does not exist
# odd does not exist
# odd does not exist
# odd does not exist
通常像下面這樣設立乙個flag開關來判斷是否存在某個元素更合理。
numbers =[2
,4,6
,8,10
]flag =
false
for n in numbers:
if n %2==
1:flag =
true
break
if flag:
print
('odd exist'
)else
:print
('odd does not exist'
)# 輸出如下:
# odd does not exist
但是考慮到**優化和盡可能pythonic的話,往for迴圈裡新增else語句就很合適了,這樣是不是更簡潔。
numbers =[2
,4,6
,8,10
]for n in numbers:
if n %2==
1:print
('odd exist'
)break
else
:print
('odd does not exist'
)# 輸出如下:
# odd does not exist
所以,對於帶有else子句的for迴圈,如果是因為迴圈條件不成立或序列中的元素已迭代結束而使得迴圈自然結束,則繼續執行else子句中的**;而如果是因為執行了break語句使得迴圈提前結束,則不再執行else子句中的**。
while & else
下面這個例子中,在while迴圈的時候,我們判斷while是否小於4,如果小於就執行迴圈,如果不小於它就不會做任何執行也不會給出任何提示。
number =
5while number <4:
if number ==3:
break
print
(number)
number +=
1
但是我們可以在while語句後面搭配else語句給出乙個列印提示,使**更容易理解。
number =
5while number <4:
if number ==3:
break
print
(number)
number +=
1else
:print
('number is greater then 4'
)# 輸出如下:
# number is greater then 4
迴圈體與else搭配陷阱
迴圈過程正常執行,沒有被break則執行else下面的語句 list range 100 for x in list if x 20 19 print x break else print else 19這裡找到乙個數字,break跳出了迴圈,else不會執行.通常迴圈體 else搭配用來處理遍歷失...
forEach跳出迴圈體
在foreach中,不能使用 continue 和 break 可以使用 return 或 return false 跳出迴圈,效果與 for 中 continue 一樣。注意該方法無法一次結束所有迴圈。foreach 跳出本次迴圈,使用return 1,2,3,4,5 foreach functi...
例項039 終止迴圈體
心法領悟039 用break避免死迴圈。充分利用迴圈可以提高程式的開發與執行效率,但是如果不注重迴圈中的演算法很容易導致程式的死迴圈,那將是程式的死穴。所以在迴圈體中要對可能出現的特殊情況適用break語句中斷迴圈。public class breakcyc system.out.println 在...