在日常coding中,分支語句的使用非常普遍,經(jīng)常會根據(jù)是否滿足一定的條件對代碼執(zhí)行的邏輯進行一些控制,所以大家對if[elif[else]]
一定不會陌生。分支語句中的else子句
在其它的條件不滿足的時候會被執(zhí)行到谚咬,適當(dāng)?shù)氖褂梅种дZ句能夠讓我們的代碼邏輯更加的豐富。
在分支語句中使用else子句在一些常見的編程語言中的用法基本相同尚粘,類似于提供了一條默認(rèn)的執(zhí)行路徑择卦,配合if
等條件判斷語句使用,相比其它的編程語言(c#, java, js等)在python中郎嫁,else有一些特殊的用法秉继,配合for
, while
等循環(huán)語句使用,甚至還能配合異常處理try except
語句進行使用泽铛,能夠讓我們的代碼更加的簡潔尚辑。
配合for/while循環(huán)語句使用
在for
循環(huán)語句的后面緊接著else
子句,在循環(huán)正常結(jié)束的時候(非return或者break等提前退出的情況下)盔腔,else
子句的邏輯就會被執(zhí)行到杠茬。先來看一個例子:
def print_prime(n):
for i in xrange(2, n):
# found = True
for j in xrange(2, i):
if i % j == 0:
# found = False
break
else:
print "{} it's a prime number".format(i)
# if found:
# print "{} it's a prime number".format(i)
print_prime(7)
2 it's a prime number
3 it's a prime number
5 it's a prime number
一個簡單打印素數(shù)的例子,判斷某個數(shù)字是否是素數(shù)的時候需要遍歷比它自己小的整數(shù)弛随,任何一個滿足整除的情況則判斷結(jié)束瓢喉,否則打印這是一個素數(shù)的info,有了else的加持舀透,整個例子的邏輯相當(dāng)?shù)摹皊elf-expressive”栓票,如同偽代碼一般的好理解而且相比在判斷整除的時候設(shè)置標(biāo)志值
然后在函數(shù)的結(jié)尾處判斷標(biāo)志值決定是否打印數(shù)字時素數(shù)的消息,代碼更簡潔沒有那么多要描述如何做的“過程式”準(zhǔn)備工作盐杂。
ps: 大家可以把例子中的被注釋代碼運行對比下效果逗载。
配合 try except錯誤控制使用
在異常處理語句中,else有相似的用法链烈,當(dāng)try代碼塊沒有拋出任何的異常時厉斟,else語句塊會被執(zhí)行到。
def my_to_int(str_param):
try:
print int(str_param)
except ValueError:
print 'cannot convert {} to a integer'.format(str_param)
else:
print 'convert {} to integer successfully'.format(str_param)
my_to_int("123")
my_to_int("me123")
123
convert 123 to integer successfully
cannot convert me123 to a integer
如打印日志所示强衡,在轉(zhuǎn)換成功未發(fā)生錯的的時候擦秽,else語句里的邏輯會被執(zhí)行,當(dāng)然這個例子可能并沒有什么太多的實際的用處漩勤,但大致能說明else在錯誤處理中的用處:簡化邏輯感挥,避免使用一些標(biāo)志值就能夠準(zhǔn)確把握是否發(fā)生錯誤的情況來做一些實際的操作(比如在保存數(shù)據(jù)的時候如果發(fā)生錯誤,在else語句塊中進行rollback的操作越败,然后緊接著還能加上finally語句完成一些清理操作触幼。
善用else
語句塊能夠讓我們編寫出更加簡明,更加接近自然語言的語義的代碼究飞,當(dāng)然也會更加的pythonic置谦,細(xì)微之處大家可以慢慢體會。