我想构建一个包含不同顺序的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多项式的容器,而在容器关注语句中,先前的元素不会被后续的元素覆盖?谢谢!
答案 0 :(得分:0)
正如沃伦的评论所说,这是由于Python的后期绑定机制所致。为了避免这种情况,一种解决方案是将循环变量作为函数的默认参数之一包括在内。即
[lambda x, i=i: hermite(i)(x) for i in range(5)]
建议阅读:https://docs.python-guide.org/writing/gotchas/#late-binding-closures。