每日10行程式碼52:編寫高質量python程式碼方法4——用輔助函式來取代複雜的表示式
今天看了effective python第4條,有所啟發。
from urllib.parse import parse_qs
# 要從url中解碼查詢字串,在下例中,每個參數列示一個整數值:
my_values = parse_qs('red=5&blue=0&green=',keep_blank_values=True)
print(my_values)
print(repr(my_values))
print('Red: ',my_values.get('red'))
print('Green: ',my_values.get('green'))
print('Opacity:',my_values.get('opacity'))
#如果有一個需求要實現,當引數返回空白時或者沒有傳此引數時能夠返回預設值0,那麼可以如下實現
#實現原理: 如果or操作符左側的子表示式估值為False,那麼整個表示式的值就是or操作右側那個子表示式的值
red = my_values.get('red', [''])[0] or 0
green = my_values.get('green', [''])[0] or 0
opacity = my_values.get('opacity', [''])[0] or 0
print('Red: %r' % red)
print('Green: %r' % green)
print('Opacity: %r' % opacity)
#假如所需的引數值是數字,上面的的表示式還要換一下
red = int(my_values.get('red', [''])[0] or 0) # 這個表示式就很複雜了
# 如果用上三元操作符,可以如下寫:
red = my_values.get('red', [''])
red = int(red[0]) if red[0] else 0 # 還是不夠簡單
# 更好的方法是使用函式,如果需要頻繁使用這種邏輯,那麼更應該用函式
def get_first_int(values, key, default=0):
found = values.get(key, [''])
if found[0]:
found = int(found[0])
else:
found = default
return found
red = get_first_int(my_values, 'red')
print(red)
要點:
- 開發者很容易過度運用python的語法特性,從而寫出那種特別複雜並且難以理解的單行表示式。
- 請把複雜的表示式移入輔助函式之中,如果要反覆使用相同的邏輯,那就更應該這麼做。
- 使用if/else表示式(三元操作符),要比用or或and 這樣的boolean操作符寫成的表示式更加清晰。
相關文章
- 高質量的程式碼 - 函式(1)函式
- 提高程式碼質量:如何編寫函式函式
- [編寫高質量iOS程式碼的52個有效方法](九)塊(block)iOSBloC
- 編寫高質量iOS與OS X程式碼的52個有效方法(一)iOS
- 編寫高質量iOS與OS X程式碼的52個有效方法(五)iOS
- 編寫高質量iOS與OS X程式碼的52個有效方法(二)iOS
- [編寫高質量iOS程式碼的52個有效方法](七)記憶體管理(上)iOS記憶體
- [編寫高質量iOS程式碼的52個有效方法](八)記憶體管理(下)iOS記憶體
- [編寫高質量iOS程式碼的52個有效方法](十)Grand Central Dispatch(GCD)iOSGC
- 如何編寫高質量的函式 -- 敲山震虎篇函式
- 怎樣編寫高質量的java程式碼Java
- 編寫高質量的程式碼,從命名入手
- 編寫高質量OC程式碼52建議總結:17.實現describtion方法C程式
- 編寫高質量OC程式碼52建議總結:13.用“方法調配技術”除錯“黑盒方法”C程式除錯
- 編寫高質量OC程式碼52建議總結:16.提供“全能初始化方法”C程式
- 《Effective JavaScript 編寫高質量JavaScript程式碼的68個有效方法》JavaScript
- 如何編寫高質量的C#程式碼(一)C#
- iOS 編寫高質量Objective-C程式碼iOSObjectC程式
- [轉]高質量JAVA程式碼編寫規範Java
- 編寫高質量程式碼
- 🐒編寫高質量程式碼(手撕程式碼)
- 如何編寫高質量的 JS 函式(1) -- 敲山震虎篇JS函式
- 如何編寫高質量和可維護的程式碼
- iOS 編寫高質量Objective-C程式碼(四)iOSObjectC程式
- iOS 編寫高質量Objective-C程式碼(一)iOSObjectC程式
- iOS 編寫高質量Objective-C程式碼(三)iOSObjectC程式
- iOS 編寫高質量Objective-C程式碼(二)iOSObjectC程式
- iOS 編寫高質量Objective-C程式碼(八)iOSObjectC程式
- iOS編寫高質量Objective-C程式碼(四)iOSObjectC程式
- iOS編寫高質量Objective-C程式碼(二)iOSObjectC程式
- iOS 編寫高質量Objective-C程式碼(五)iOSObjectC程式
- iOS 編寫高質量Objective-C程式碼(六)iOSObjectC程式
- iOS 編寫高質量Objective-C程式碼(七)iOSObjectC程式
- iOS編寫高質量Objective-C程式碼(六)iOSObjectC程式
- 編寫高質量程式碼的思考
- 【譯】高階函式:利用Filter、Map和Reduce來編寫更易維護的程式碼函式Filter
- 如何編寫高質量的 JS 函式(3) --函數語言程式設計[理論篇]JS函式函數程式設計
- 編寫高質量箭頭函式的5個最佳做法函式