Python 当用作lambda函数时,scipy-hermite多项式列表的行为异常

Python 当用作lambda函数时,scipy-hermite多项式列表的行为异常,python,scipy,hermite,Python,Scipy,Hermite,我想构建一个不同订单的容器(链接到scipy的hermite文档)。根据文档所说,我希望scipy.special.hermite接受订单n并返回一个函数-一个订单n的hermite多项式 这似乎适用于单个函数。但是,当我试图通过将Hermitte多项式实现为lambda函数来使用这些多项式时,它们似乎都将重置为最后一个多项式: from scipy.special import hermite base_funcs = [lambda x: hermite(i)(x) for i in ran

我想构建一个不同订单的容器(链接到scipy的hermite文档)。根据文档所说,我希望
scipy.special.hermite
接受订单
n
并返回一个函数-一个订单
n
的hermite多项式

这似乎适用于单个函数。但是,当我试图通过将Hermitte多项式实现为lambda函数来使用这些多项式时,它们似乎都将重置为最后一个多项式:

from scipy.special import hermite
base_funcs = [lambda x: hermite(i)(x) for i in range(5)]

[f(1) for f in base_funcs]
Out[40]: [-20.0, -20.0, -20.0, -20.0, -20.0]
hermite(0)(1)
Out[41]: 1.0
hermite(4)(1)
Out[42]: -20.0

有没有一种方法可以正确地启动不同Hermite多项式的容器,而不让容器理解语句中的后续元素覆盖之前的元素?谢谢

正如Warren的评论所说,这是由于Python的后期绑定机制。为了避免这种情况,一种解决方案是将循环变量作为函数的默认参数之一。i、 e

[lambda x, i=i: hermite(i)(x) for i in range(5)]

建议阅读:

正如Warren的评论所说,这是由于Python的后期绑定机制。为了避免这种情况,一种解决方案是将循环变量作为函数的默认参数之一。i、 e

[lambda x, i=i: hermite(i)(x) for i in range(5)]

建议阅读:

这就是问题所在。有关如何修复的建议,请参见链接,或在stackoverflow(例如)上搜索该术语。@WarrenWeckesser感谢您在回答工作中为我提出的建议。这就是答案。有关如何修复的建议,请参见链接,或在stackoverflow上搜索该术语(例如)。@WarrenWeckesser感谢您在回答工作中为我提供的建议。