python中使用else代替狀態變數,pythonelse

來源:互聯網
上載者:User

python中使用else代替狀態變數,pythonelse

翻看公司的代碼文檔,在代碼風格文檔中,寫著:為了提高代碼的可維護性,代碼中減少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        if not inserted:            _sorted.append(i)    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:            _sorted.append(i)    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擺脫一些累贅的狀態變數,還是可取的。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.