list of polynomial functions
Tim Chase
python.list at tim.thechases.com
Thu Jun 15 14:43:33 EDT 2006
> The `i` is the problem. It's not evaluated when the lambda
> *definition* is executed but when the lambda function is
> called. And then `i` is always == `n`. You have to
> explicitly bind it as default value in the lambda definition:
>
> polys.append(lambda x, i=i: polys[i](x)*x)
>
> Then it works.
Just to sate my curiosity, why can the lambda find "polys", but
not find "i"? If what you're describing is the case, then it
seems to me that the following code should work too:
def make_polys(n):
p = lambda x: 1
polys = [p]
for i in range(n):
p = polys[i]
polys.append(lambda x: (p(x) * x))
return polys
yet it suffers the same problem as the original. Outside the
scope of make_polys, neither polys[] nor i exists.
There's some subtle behavior here that I'm missing.
-tkc
More information about the Python-list
mailing list