翻看公司的**文件,在**風格文件中,寫著:為了提高**的可維護性,**中減少flag這類狀態變數的使用。這個問題,平時確實沒有想過,面對這種需求時,第一反應就是使用flag標記狀態。那麼使用什麼樣的技巧或**結構才能,才能代替狀態變數的使用呢?我想到的方法是應用else。
說到else,最常用的語法是if-elif-else,實際上else是可以與迴圈和try搭配使用的,下面我寫了乙個else替換狀態變數的例子,使用插入法對陣列排序。首先使用狀態變數實現,**如下:
definsertion_sort(input_list):
if len(input_list) <= 1:
return
input_list
_sorted = input_list[:1]
for i in input_list[1:]:
inserted =false
for j in
xrange(len(_sorted)):
if i <=_sorted[j]:
_sorted.insert(j, i)
inserted =true
break
ifnot
inserted:
return _sorted
使用inserted來標記新元素是否執行了插入操作,如果未執行的話,將元素插入到末位。
下面給出使用else替換inserted的**實現:
definsertion_sort1(input_list):
if len(input_list) <= 1:
return
input_list
_sorted = input_list[:1]
for i in input_list[1:]:
for j in
xrange(len(_sorted)):
if i <=_sorted[j]:
_sorted.insert(j, i)
break
else
:
return _sorted
當for迴圈執行完整,中途沒有break的話,就會執行else操作,也就起到了和inserted相同的作用。
else在try...except...else...finally的流程控制語法中同樣適用,當程式沒走進except時,就會使用else 中的**,我們就不需要定義狀態變數來記錄程式是否走入except,**如下:
defdivide(x, y):
try:
result = x /y
except
zerodivisionerror:
print("
error: division by 0!")
else
:
"result = %s
" %result
finally
:
print("
divide finished!
")
因為每個人的變成習慣不同,這種python獨有的語法並不被提倡,而且如果**巢狀了多層迴圈,那麼使用else代替狀態變數也降低了**的可讀性。但是如果python使用足夠熟練,在一些簡短的迴圈控制語句中,我們通過else擺脫一些累贅的狀態變數,還是可取的。
python 中for與else搭配使用
先看一段程式 for i in range 10 if i 5 print found it i s i break else print not found it 執行結果 found it i 5 必須包含break,如果沒有 for i in range 10 if i 5 print fou...
else語句的使用
一異常 s 例如 try print a except print b else print c 8.3.6 finally 語句的使用 finally 語往往用來在可能發生異常的請句後面進行清理,需要和try子句配合使用。try a 1 0 finally print 清除變數a del a 在....
使用Join代替In
我們知道,在sql中使用in讓我們的where子句可以規定多個值。當需要從乙個集合中查詢包含某幾個值的記錄的時候,通常我們會選擇使用in來實現,其實,使用join也可以實現這樣的功能,而且效能要比in好。我會從以下幾個方面來進行總結。使用in和join的效能對比 ef中如何使用join來代替in 首...