Python lambda comprehension print i



我试图使用推导式来编写lambda列表,其中每个lambda在调用时将打印索引,即它在列表中的位置。

list = [lambda : print(i) for i in range(10)]
list[0]()

但问题是调用任何一个lambda都产生相同的结果,它们输出9。我怎样才能以我想要的方式获取I的值呢?

您需要确保在lambda定义时计算i并将其绑定在lambda的主体内,而不是将其延迟到调用(此时循环已经完成,i = 9)。这样做的一种方法是使用i作为lambda参数的默认值,因为默认值是在定义函数时评估的,而不是在调用函数时:

>>> funcs = [lambda x=i: print(x) for i in range(10)]
>>> funcs[0]()
0
>>> funcs[1]()
1

注意,你实际上不需要使用不同的变量名;您可以将参数命名为i,它将被隐藏在lambda主体中,并且仍然以相同的方式工作:

>>> funcs = [lambda i=i: print(i) for i in range(10)]

相关内容

  • 没有找到相关文章

最新更新