如何创建一个推导式,其元素是只有一个参数的lambda函数?
我想用函数 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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。