1

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

这似乎适用于单个功能。但是当我尝试通过将 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 多项式的容器,而不用容器理解语句中的后续元素覆盖先前的元素?谢谢!

4

1 回答 1

0

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

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

推荐阅读:https ://docs.python-guide.org/writing/gotchas/#late-binding-closures 。

于 2019-04-30T11:59:54.293 回答