作者uranusjr (←这人是超级笨蛋)
看板Python
标题Re: [问题] function 选择性使用 default kwarg
时间Wed Dec 9 21:59:24 2020
※ 引述《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://webptt.com/cn.aspx?n=bbs/Python/M.1607522366.A.541.html
1F:→ papple23g: 了解 感谢建议 12/11 11:12