本文介绍了怪异的行为:列表理解内的Lambda的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在python 2.6中:

In python 2.6:

[x() for x in [lambda: m for m in [1,2,3]]]

导致:

[3, 3, 3]

我希望输出为[1、2、3].即使使用非列表理解方法,我也会遇到完全相同的问题.甚至在我将m复制到另一个变量之后.

I would expect the output to be [1, 2, 3]. I get the exact same problem even with a non list comprehension approach. And even after I copy m into a different variable.

我想念什么?

推荐答案

要使Lambda记住m的值,可以使用具有默认值的参数:

To make the lambdas remember the value of m, you could use an argument with a default value:

[x() for x in [lambda m=m: m for m in [1,2,3]]]
# [1, 2, 3]

之所以起作用,是因为默认值在定义时设置一次.现在,每个lambda都使用其自己的默认值m,而不是在执行lambda时在外部范围中查找m的值.

This works because default values are set once, at definition time. Each lambda now uses its own default value of m instead of looking for m's value in an outer scope at lambda execution time.

这篇关于怪异的行为:列表理解内的Lambda的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-06 09:44