Yes, it really is that simple. :-)
A common example is a function that makes a function which adds a constant to its argument:
>>> def makeadder(n): ... def adder(x): ... return x + n ... return adder ...
Make a function that adds 3 to its argument...note there is no special syntax for the return, just assign to a name
>>> add3 = makeadder(3)
add3 is a function: >>> add3 <function adder at 0x008D68F0> >>> add3(4) 7
Make another function to add 5: >>> add5 = makeadder(5) >>> add5(10) 15
add3 still works, it is a separate function with its own binding of n: >>> add3(2) 5
Kent
Nandan wrote:
I'm looking for resources to help me with a fn that returns a fn after binding one of its arguments (aka currying, like the bind1st of C++)
Considering Python syntax is quite straightforward, this is my first try:
def getjlistrenderer(opname): def listrender(): # use opname, eg ops=getlist(opname) # or set local fn variable return renderer; return listrender; #?or f=listrender(); return f;
Is it really as simple as this? Or will I always return the same function definition? I need it to return a 'new' function for each call to getjlistrender() .. do I need to create a new fn with f=listrender() ?
No, this is a call to listrender, it will return the renderer object not a function.
Any pointers to pages/books etc. appreciated. I am looking through my books too, but thought I'd get some more pointers as well. Web searching so far only shows lambda, which is one-liner, and that won't do.
There are several currying recipes in the Python Cookbook: http://aspn.activestate.com/ASPN/search?query=curry&x=0&y=0§ion=PYTHONCKBK&type=Subsection
Searching the cookbook for 'closure' also gives some recipes that might be of interest.
Kent
Thanks!
_______________________________________________ Tutor maillist - [EMAIL PROTECTED] http://mail.python.org/mailman/listinfo/tutor