Python 为什么要在列表理解中包含整个“lambda”表达式?

Python 为什么要在列表理解中包含整个“lambda”表达式?,python,lambda,list-comprehension,Python,Lambda,List Comprehension,Martin Chikilian在他的《关于Python编程的错误》中介绍了以下内容,以说明关于闭包内变量生存期的误解: def create_multipliers(): return [lambda x: i * x for i in range(5)] for multiplier in create_multipliers(): print(multiplier(2)) 当我在调用乘法器之间的闭包中保持其最终值4时,输出对一些人来说是可以理解的。Martin提供了一个

Martin Chikilian在他的《关于Python编程的错误》中介绍了以下内容,以说明关于闭包内变量生存期的误解:

def create_multipliers():
    return [lambda x: i * x for i in range(5)]

for multiplier in create_multipliers():
    print(multiplier(2))
当我在调用乘法器之间的闭包中保持其最终值4时,输出对一些人来说是可以理解的。Martin提供了一个获得所需输出的方法,详情请参阅他的文章

我想知道的是,通过将整个lambda包含在列表中实现了什么?在科学计算等领域,这是一个常见的习语吗?因为,对我来说,以下内容更容易理解:

def create_multiplier():
    return lambda x: [i * x for i in range(5)]

multiplier = create_multiplier()
print(multiplier(2))
输出: [0,2,4,6,8]


第二个版本的输出与Martin列出的结果大致相符。那么这里发生了什么呢?

他们完成了不同的事情。前者返回返回数字的lamba列表,后者返回返回数字列表的lambda。您可以为每个应用程序设想不同的用例。

请检查python规范:也是python常见问题解答: