Re: [問題] function 選擇性使用 default kwarg
※ 引述《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
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 6 之 6 篇):