關於在python中避免if分支太多,提高方法的可讀性

在很多場景下,我們可能需要寫大量的if  else分支來進行判斷,然後根據結果再進入下一步的業務邏輯。這樣可能導致一個方法的行數會大大增加,增加閱讀的難度,並且健壯性變差。

 

目前只想到了2種場景下,代替if else 的方案。

以優化下面代碼爲例,下面是原代碼:

def slove():
    number = input("please input a number, limit 0-5")
    if number == "1":
        time.sleep(1)
        print("the number that you input is: ",1)
    if number == "2":
        time.sleep(1)
        print("the number that you input is: ",2)
    if number == "3":
        time.sleep(1)
        print("the number that you input is: ",3)
    if number == "4":
        time.sleep(1)
        print("the number that you input is: ",4)
    if number == "5":
        time.sleep(1)
        print("the number that you input is: ",5)
    else:
        print("a error occur ,check")
    time.sleep(1)
    print("program exit...")
    exit(0)

 

第一種優化場景,判斷條件爲數字類型:

將每個分支拆分爲一個函數。

def test1(number):
    if number == "1":
        print("the number that you input is: ",1)

def test2(number):
    if number == "2":
        print("the number that you input is: ", 2)

def test3(number):
    if number == "3":
        print("the number that you input is: ", 3)

def test4(number):
    if number == "4":
        print("the number that you input is: ", 4)

def test5(number):
    if number == "5":
        print("the number that you input is: ", 5)
    # else:
    #     return

再循環這個函數列表

def slove():
    number = input("please input a number, limit 0-5")
    solve_list = [test1, test2, test3, test4, test5]
    for func in solve_list:
        func(number)

if __name__ == '__main__':
    slove()

 

第二種場景,也是比較常見的,判斷條件爲字符串類型

拆分出來的函數不變,修改slove函數。

def slove2():
    number = input("please input testN")
    solve_list = [test1, test2, test3, test4, test5]
    for func in solve_list:
        # func.__name__取函數的名字
        if number == func.__name__:
            func(number)

if __name__ == '__main__':
    slove2()

根據傳入的字符串,執行對應的分支函數。

 

 

 

       最後解釋一下,拆分if else並不能提升代碼的執行效率,如果業務很複雜的話,可能還會比直接寫if else要低一些(因爲怎麼拆分還要考慮一下)。但拆分出來後,每一個分支的業務會更直觀,代碼整體可讀性會更好。

 

 

python complex函數

python避坑篇

python部分高級用法

python開發手冊

python內置函數(下)

python內置屬性,函數

python異常處理

python lambda函數​​​​​​​

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章