作者papple23g (逆道者)
看板Python
标题[问题] function 选择性使用 default kwarg
时间Fri Dec 4 11:40:10 2020
有个困扰很久的问题
考虑以下程式码:
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://webptt.com/cn.aspx?n=bbs/Python/M.1607053212.A.B82.html
1F:推 lycantrope: 可以用decorator 12/04 17:30