作者ddavid (谎言接线生)
看板Python
标题Re: [问题] function 选择性使用 default kwarg
时间Fri Dec 4 14:36:36 2020
※ 引述《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来源就会有更好的做法,不过没说就当
成不能改吧。
--
「如果你没法给我个解释的话,死一万次也不能弥补你的过错!」
「我没办法死一万次赔你啊。」
「可是你有办法半死两万次,知道吗,嗯?」
--莲.席斯塔
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 114.32.17.60 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1607063798.A.3A5.html
※ 编辑: ddavid (114.32.17.60 台湾), 12/04/2020 14:44:19
1F:推 papple23g: 感谢回应 确实只能这样了 12/04 17:49
2F:推 Yshuan: 推这篇, 用dict去unpack 绝对是比较考量後续扩充的作法 12/15 18:43