functional programming and default parameters
Nick Perkins
nperkins7 at home.com
Fri Jun 29 02:52:54 EDT 2001
Here is an experiment with functional programming and default parameters..
(the example uses trivial functions, but it's the principle of the thing...)
..suppose i want to create a list of functions with no parameters,
such that:
fns[0]() -> 0
fns[1]() -> 1
fns[2]() -> 2
etc.
this does not work:
>>> fns = [lambda:i for i in range(3)]
>>> fns[0]()
2
>>> fns[1]()
2
but this does work:
>>> fns = [lambda i=i:i for i in range(3)]
>>> fns[0]()
0
>>> fns[1]()
1
..but the problem is that i wanted functions of zero parameters,
not functions with one optional parameter:
>>> fns[1](99)
99
( oops! not intended to be used this way! )
Nested scopes do not seem to solve the problem,
I have tried things like:
from __future__ import nested_scopes
def fnlist(n):
list =[]
for i in range(n):
def fn(): #or: def fn(i=i)
return i
list.append(fn)
return list
.. but the result is the same:
the inner function needs to have i as a default parameter
in order to 'freeze' the value of i into the function,
thereby also producing functions with one optional parameter.
Can this be done without using default parameters?
More information about the Python-list
mailing list