Let's Talk About Lambda Functions!
Miki Tebeka
tebeka at cs.bgu.ac.il
Tue Aug 6 04:21:18 EDT 2002
Hello Brit,
> So I know what lambda functions are, they're syntax and how they're used.
> However I'm not sure *why* one would use a lambda function. What's the
> advantage that they offer over a regular function?
Warning: I've bee a Scheme believer before I've converted to Python
:-)
Sometime lambda functions yeild more (IMO) elegant solution that is
easier to read and understand.
One example is success/fail continuations.
---------
# Demonstrate success/fail continuation
class Tree:
'''Simple binary tree'''
def __init__(self, val, lson=None, rson=None):
self.val = val
self.lson = lson
self.rson = rson
def display(self, indent = 0):
print ' ' * indent, self.val
if self.lson:
self.lson.display(indent + 1)
if self.rson:
self.rson.display(indent + 1)
# We'd like to find the path we need to take in 'left', 'right' steps
# in order to get to a certain node in a tree
def path2(t, v):
'''Find path to v in t'''
return sfpath2(t, v, lambda v: v, lambda: 'Not Found') # Call with
initial continuations
def sfpath2(t, v, success, fail):
'''Success/Fail continuation solution'''
if not t:
return fail() # Can't find
if t.val == v: # Found right here
return success([])
# Recursive case, update success/fail continuations
return sfpath2(t.lson, v,
lambda v: success(['left'] + v),
lambda: sfpath2(t.rson, v, lambda v:
success(['right'] + v), fail))
# -- testing
t = Tree(1,
Tree(2,
Tree(3)),
Tree(4,
Tree(5)))
t.display()
print '* Path to 5'
print path2(t, 5)
print '* Path to 10'
print path2(t, 10)
---------
Miki
More information about the Python-list
mailing list