Python中map+lambda三元表达式else分支如何不执行任何操作
问题修复方案
核心需求实现
你可以在三元表达式的else分支直接返回None,这是Python中合法的无副作用表达式,不会产生任何输出也不会修改运行状态,完全符合无操作的要求。
同时你原代码存在两处必须修正的错误:
kwargs.value应为kwargs.values(),否则会抛出属性不存在的异常self._value_store.update(k=v)写法错误,该写法会固定新增键为字符串'k'的键值对,而非使用变量k作为键,需要改为传入字典{k:v}
修正后代码如下:
# 主动消费map迭代器触发执行,Python3下必须加这一步否则逻辑不会运行 list(map(lambda k,v: self._value_store.update({k:v}) if self.keyword_check(k) else None, kwargs.keys(), kwargs.values()))
更优替代方案
你也可以先过滤符合校验规则的键值对再执行更新,不需要处理else分支,逻辑更清晰:
self._value_store.update(filter(lambda item: self.keyword_check(item[0]), kwargs.items()))
注意:Python 3 中
map属于惰性求值函数,仅调用map只会生成迭代器,不会自动执行内部的更新逻辑,必须消费迭代器(比如转为列表、用any()遍历等)才能触发操作。
内容的提问来源于stack exchange,提问作者Tiago Mendes
相关产品推荐
相关产品推荐

