作者art1 (人,原来不是人)
看板Python
标题Re: [问题] function 选择性使用 default kwarg
时间Sun Dec 6 06:51:28 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)
: 其中不同的 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://webptt.com/cn.aspx?n=bbs/Python/M.1607208691.A.A05.html
※ 编辑: art1 (218.173.23.24 台湾), 12/06/2020 06:58:22
1F:→ papple23g: 谢谢回应 不过通常是无法得知预设值的 f也不能修改 12/06 15:41