前言
本文主要給大家介紹了在Python中return和finally共同存在的坑,以及填坑經驗,分享出來供大家參考學習,下面話不多說了,來一起看看詳細的介紹吧。
初識 return
相信每一個用過Python函數的童鞋, 肯定會用過return語句, return顧名思義, 就是用來返回值給調用者, 例如:
def test(): a = 2 return as = test()print s# 輸出結果2
對于上面的結果, 相信大家都不會感到意外, 那么加大點難度, 如果在return語句還有代碼呢? 那句代碼會怎樣呢?
def test(): a = 2 return a s = 3 print ss = test()print s# 結果是什么?
老司機肯定一眼就能看出結果, 但是對于尚在入門或者對return不很了解的童鞋, 可能就會懵逼了~ 后面的兩句代碼是否會被執行?
答案是: 不會執行
return正如它的名字那樣, 當執行這句代碼, 整個函數都會返回, 整個調用就算結束了~ 所以在return后面的代碼, 都是不會被執行的!
也正因為這個特性, 所以有種編碼規范叫early return的編碼規范就被倡導
它的意思大概就是: 當條件已經滿足返回時, 就馬上返回
舉個例子來說明:
def test(): a = 2 if a > 2: result = 'more than' else: result = 'less than' return results = test()print s
上面的代碼應該比較容易理解, 就是根據a的值, 來決定返回的result是什么. 這樣的編碼相信也是大部分童鞋喜歡用的, 因為這樣比較符合我們直覺, 然而, 這樣寫似乎有點浪費, 因為當第一個判斷結束了, 如果結果為真, 就應該返回more than, 然后結束函數, 否則肯定就是返回less than, 所以我們可以把代碼調整成這樣:
def test(): a = 2 if a > 2: return 'more than' else: return 'less than's = test()print s
甚至是:
def test(): a = 2 if a > 2: return 'more than' return 'less than's = test()print s
結果都是和第一個寫法是一樣的! 第一次看到這樣寫法的童鞋, 可能會覺得比較難以接受, 甚至覺得可讀性很差, 但是其實這樣的寫法, 我覺得反而會稍微好點. 因為:
運行的代碼數少了, 調用方能更快得到結果 有利于減少嵌套的層數, 便于理解.對于第2點在這需要解釋下, 很多時候我們寫得代碼, 嵌套很深, 都是因為if/else的鍋, 因為嵌套的if/else 比較多, 所以導致一堆代碼都嵌套得比較深, 這樣對于其他小伙伴, 簡直就是災難, 因為他們很可能在閱讀這部分代碼時, 就忘了前面的邏輯....
為了更加容易理解, 舉個代碼例子:
def test(): a = 2 if a > 2: result = 'not 2' else: a += 2 if a < 2: result = 'not 2' else: for i in range(2): print 'test ~' result = 'Target !' return results = test()print s# 輸出結果test ~test ~Target !
新聞熱點
疑難解答