python 使用else代替狀態變數

2022-05-03 04:42:09 字數 1710 閱讀 9257

翻看公司的**文件,在**風格文件中,寫著:為了提高**的可維護性,**中減少flag這類狀態變數的使用。這個問題,平時確實沒有想過,面對這種需求時,第一反應就是使用flag標記狀態。那麼使用什麼樣的技巧或**結構才能,才能代替狀態變數的使用呢?我想到的方法是應用else。

說到else,最常用的語法是if-elif-else,實際上else是可以與迴圈和try搭配使用的,下面我寫了乙個else替換狀態變數的例子,使用插入法對陣列排序。首先使用狀態變數實現,**如下:

def

insertion_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的**實現:

def

insertion_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,**如下:

def

divide(x, y):

try:

result = x /y

except

zerodivisionerror:

print("

error: division by 0!")

else

:

print

"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 首...