【发布时间】:2019-09-17 21:57:22
【问题描述】:
我想构建一个包含不同订单的Hermite polynomials(链接到 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 多项式的容器,而不会使容器理解语句中的后续元素覆盖先前的元素?谢谢!
【问题讨论】:
-
那是late binding closure gotcha。有关如何修复它的建议,请参阅链接,或在 stackoverflow 上搜索该术语(例如 stackoverflow.com/questions/37791680/…)。
-
@WarrenWeckesser 感谢您在回答中提出的建议对我有用。