如何让Lambda函数返回对象而非对象最后调用方法的None值?
解决Lambda返回对象而非None的技巧
针对你遇到的问题——因对象方法(比如字典的update())返回None,导致Lambda最终返回None而非目标对象,这里有几种实用技巧:
方法1:利用字典解包直接生成新字典
字典解包可以直接合并两个字典并生成新副本,无需调用返回None的update()方法,代码简洁高效:
dict_update = lambda d, upd: {**d, **upd} d = dict(lw=3, ls='-') upd = dict(c='C0', lw=4) d1 = dict_update(d, upd) for v in [d, upd, d1]: print(v)
输出结果:
{'lw': 3, 'ls': '-'} {'c': 'C0', 'lw': 4} {'lw': 4, 'ls': '-', 'c': 'C0'}
方法2:使用海象运算符(Python 3.8+)先赋值再返回
通过海象运算符先创建字典副本,执行更新操作后直接返回副本对象:
dict_update = lambda d, upd: (x := d.copy()).update(upd) or x d = dict(lw=3, ls='-') upd = dict(c='C0', lw=4) d1 = dict_update(d, upd) for v in [d, upd, d1]: print(v)
原理:update()返回None,None or x会返回x,以此拿到更新后的副本。
方法3:元组表达式执行操作后取对象
在元组里按顺序执行更新操作,最后提取目标对象,利用元组的求值顺序特性:
dict_update = lambda d, upd: (x := d.copy(), x.update(upd), x)[2] d = dict(lw=3, ls='-') upd = dict(c='C0', lw=4) d1 = dict_update(d, upd) for v in [d, upd, d1]: print(v)
元组会依次执行前两个表达式,最后返回第三个元素x(即更新后的字典副本)。
内容的提问来源于stack exchange,提问作者mins
相关产品推荐
相关产品推荐

