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

作者: ddavid (謊言接線生)   2020-12-04 14:36:36
※ 引述《papple23g (逆道者)》之銘言:
: 該布林值取決了我要使用預設的 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
: 想詢問有其他更好的寫法嗎?
: 感謝大家
這樣可能好一點點:
params = {}
params.update({} if use_default_b else {"b": 100})
f(a, **params)
每多一個這種參數就多一行update就好。
其實如果可以改動f內容跟use_default_b來源就會有更好的做法,不過沒說就當
成不能改吧。
作者: papple23g (逆道者)   2020-12-04 17:49:00
感謝回應 確實只能這樣了
作者: Yshuan (倚絃)   2020-12-15 18:43:00
推這篇, 用dict去unpack 絕對是比較考量後續擴充的作法

Links booklink

Contact Us: admin [ a t ] ucptt.com