如何创建一个推导式,其元素是只有一个参数的lambda函数?

编程语言 2026-07-10

我想用函数 e0, e1, e2 解包一个可迭代对象,该对象返回 e 可迭代对象的前三个元素。我可以用推导式定义这个函数,但由于闭包问题,我需要添加一个带默认值的伪参数 i=i

e0, e1, e2 = [lambda e, i=i: e[i] for i in range(3)]

这按预期工作:

t = 'abc'
print(e0(t), e1(t), e2(t))

>>> a b c

然而我不想让调用方能够使用这个第二个参数,例如我不想允许如下调用,它会改变 e0 的行为:

e0(t, 2)

>>> c

e0 必须是一个只有一个参数的函数。如何调整列表推导式以同时满足这两个约束:只有一个参数,同时为 i 提供默认值?

解决方案

通过一个外层lambda:

e0, e1, e2 = [(lambda i: lambda e: e[i])(i) for i in range(3)]

或者针对这个特定的使用场景:

from operator import itemgetter

e0, e1, e2 = map(itemgetter, range(3))
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章