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