※ 引述《papple23g (逆道者)》之銘言:
: 有個困擾很久的問題
: 考慮以下程式碼:
: def f(a,b=10):
: print(a+b)
: use_default_b=True
: a=5
: if use_default_b:
: f(a)
: else:
: f(a,b=100)
: 其中不同的 use_default_b 布林值會有不同的運行結果:
: 當 use_default_b 是 True 時,會印出 15
: 當 use_default_b 是 False 時,會印出 105
: 該布林值取決了我要使用預設的 b 值 還是用自訂的 b 值
: 不過我一直想要把 if...else 區塊 精簡成一行
: 原因是有時候 f 函數的 kwargs 非常多
: 等於是要打兩次幾乎帶有一模一樣 kwargs 的 f 函數,而差異僅在多了一個 b 參數
: 剛剛嘗試了一下,下面這行可以達到我想要的效果:
: f(a,**{k:v for k,v in ([('b',100)] if not use_default_b else [])})
: 但是如同所見,非常的不優雅...XD
: 想詢問有其他更好的寫法嗎?
: 感謝大家
不知道前後限制下,我會簡單這樣改寫,參考看看:
def f(a, b):
print(a+b)
a = 5
b = 10 # This is default b
if not use_default_b:
b = 100 # get new b value
f(a, b=b)
其實我們都知道 default b value,那就把它抽出來,要用不用 default b 就後面決定