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

看板Python作者 (←這人是超級笨蛋)時間3年前 (2020/12/09 21:59), 編輯推噓0(001)
留言1則, 1人參與, 3年前最新討論串6/6 (看更多)
※ 引述《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) : 該布林值取決了我要使用預設的 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 [])}) 我會建議不要拘泥於非得一行, 而是寫成這樣 opt_kwargs = {} if not use_default_b: opt_kwargs["b"] = 100 if not use_default_c: opt_kwargs["c"] = 200 ... f(a, **opt_kwargs) 如果你有多於一個這種參數 (從你的問題看起來是如此) 這樣寫對於之後讀程式的人會輕鬆很多 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.230.176.221 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1607522366.A.541.html

12/11 11:12, 3年前 , 1F
瞭解 感謝建議
12/11 11:12, 1F
文章代碼(AID): #1VqDW-L1 (Python)
討論串 (同標題文章)
文章代碼(AID): #1VqDW-L1 (Python)