如何在append方法中直接获取lambda表达式的执行结果而非引用?
问题解答
完全可以做到,你只需要在定义lambda表达式的同时直接调用它,就能把执行结果而非函数本身添加到列表里,不需要先赋值给变量。
针对你的代码场景,可以这么写:
mapset[ind].append((lambda: str1[i] if str1[i] not in mapset[ind] else str2[i])())
这里的关键细节:
- 你的lambda里定义了参数
x但实际没用到,所以可以直接改成无参lambda,然后用()直接触发执行 - 如果后续需要给lambda传参(比如把
i作为参数传入避免变量绑定问题),也可以直接在调用时传值:
mapset[ind].append((lambda idx: str1[idx] if str1[idx] not in mapset[ind] else str2[idx])(i))
这么写就能一步完成lambda的定义与执行,直接把判断后的字符串结果添加到mapset[ind]子列表中,完全不需要额外的变量赋值步骤。
内容的提问来源于stack exchange,提问作者Draven Dracuss
相关产品推荐
相关产品推荐

