Python列表推导式中Lambda返回函数对象的原因解析
为什么列表推导式里的Lambda函数没有执行,反而返回函数对象?
你的问题核心在于Lambda函数定义后没有被调用,导致列表推导式里的第一个元素只是函数对象,而非执行后的字符串结果。
问题原因拆解
你写的代码片段:
[(lambda item: item[0].strip(':'), int(item[1])) for item in items]
这里的lambda item: item[0].strip(':')只是定义了一个匿名函数,但没有触发它执行。Lambda函数必须通过(参数)的形式调用才会运行并返回结果,否则它就是一个函数对象,会被直接存入列表的元组中。
而直接写item[0].strip(':')时,这是一个立即执行的字符串处理表达式,循环到每个item时会直接计算出结果,所以能得到预期的字符串。
正确的实现方式
其实完全没必要用Lambda来做这件事,直接用表达式处理后转字典更简洁:
方式1:列表推导式转字典
items = [['fish:', '2'], ['cats:', '3'], ['dogs:', '5']] result_dict = dict([(item[0].strip(':'), int(item[1])) for item in items]) print(result_dict) # 输出: {'fish': 2, 'cats': 3, 'dogs': 5}
方式2:更高效的字典推导式
Python支持直接用字典推导式生成目标字典,代码更直观:
result_dict = {item[0].strip(':'): int(item[1]) for item in items}
如果非要用Lambda(虽然没必要),需要在定义后立即调用它:
[(lambda x: x[0].strip(':'))(item), int(item[1]) for item in items]
这样每个Lambda函数都会被传入当前的item并执行,返回处理后的字符串。
内容的提问来源于stack exchange,提问作者James S.
相关产品推荐
相关产品推荐

