functions which take functions

Emile van Sebille emile at fenx.com
Mon Apr 9 17:20:19 EDT 2012


On 4/9/2012 11:57 AM Kiuhnm said...
> Do you have some real or realistic

... yes

> (but easy and self-contained)

.... aah, no.

> examples when you had to define a (multi-statement) function and pass it
> to another function?

This weekend I added functionality to a subsystem that allows users to 
write simple get functions stored in [funcname].py files in a specified 
directory that are read, compliled, and stored in a dictionary to be 
executed dynamically.  So, when a properly crafted command is recieved 
the corresponding function object is retrieved from the dictionary and 
exectued.

... hang on ...  ok -- here's a simple self contained example - HTH!

Emile

----

STACK=[]

def push(this):
     STACK.append(int(this))

def plus(this):
     tosa,tosb = STACK.pop(),STACK.pop()
     push(tosa+tosb)

def minus(this):
     tosa,tosb = STACK.pop(),STACK.pop()
     push(tosa-tosb)

def times(this):
     tosa,tosb = STACK.pop(),STACK.pop()
     push(tosa*tosb)

def div(this):
     tosa,tosb = STACK.pop(),STACK.pop()
     push(tosb/tosa)

def equals(this):
     return STACK.pop()

funcs = { "+" : plus,
           "-" : minus,
           "*" : times,
           "/" : div,
           "=" : equals
           }


def calculate (text):
     for part in text.split():
         retval = funcs.get(part,push)(part)
     return retval


assert calculate ("4 3 + =") == 7
assert calculate ("4 3 * =") == 12
assert calculate ("12 3 / =") == 4
assert calculate ("1 2 3 4 + + + =") == 10




More information about the Python-list mailing list