[問題] function 選擇性使用 default kwarg

作者: papple23g (逆道者)   2020-12-04 11:40:10
有個困擾很久的問題
考慮以下程式碼:
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
想詢問有其他更好的寫法嗎?
感謝大家
作者: lycantrope (阿寬)   2020-12-04 17:30:00
可以用decorator

Links booklink

Contact Us: admin [ a t ] ucptt.com