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

看板Python作者 (逆道者)時間3年前 (2020/12/04 11:40), 編輯推噓1(100)
留言1則, 1人參與, 3年前最新討論串1/6 (看更多)
有個困擾很久的問題 考慮以下程式碼: 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 想詢問有其他更好的寫法嗎? 感謝大家 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.216.6.172 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1607053212.A.B82.html

12/04 17:30, 3年前 , 1F
可以用decorator
12/04 17:30, 1F
文章代碼(AID): #1VoQ-Sk2 (Python)
討論串 (同標題文章)
文章代碼(AID): #1VoQ-Sk2 (Python)