看板 Python 關於我們 聯絡資訊
※ 引述《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) : 其中不同的 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 : 想詢問有其他更好的寫法嗎? : 感謝大家 f(a, b = 10 if condition else 100) 既然知道預設值是多少,直接傳就好了 -- 「看在上帝的份上,我們不能當著孩子的面槍殺他的父親!」 「那我們就連孩子一起幹掉!」 「第一槍打中的是那個天真的孩子,第二槍是抱著孩子的母親。第三槍 停頓了三秒,當難以致信的父親擦拭著臉上愛子的腦漿從震驚中醒轉 過來,慢慢的轉頭看向停車的地方,分辨出是誰在攻擊他後,第三顆 子彈才將他的腦殼打飛。」 ─摘自〈狼群〉 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 218.173.23.24 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1607208691.A.A05.html ※ 編輯: art1 (218.173.23.24 臺灣), 12/06/2020 06:58:22
papple23g: 謝謝回應 不過通常是無法得知預設值的 f也不能修改 12/06 15:41