Closures in python
Syver Enstad
syver at inout.no
Thu Sep 18 07:32:43 EDT 2003
kbilsted at it-c.dk (Kasper B. Graversen) writes:
> Having played with Smalltalk for the past month, I'm getting used to
> passing code as arguments to methods... how easy is it to do this in
> python? I haven't seen any recent postings on this subject here...
It is fairly straightforward:
import sys
def funcThatTakesCallable(aCallable):
aCallable('SomeString')
class MyClass:
def myFunc():
def myCallable(arg):
print arg
funcThatTakesCallable(myCallable)
funcThatTakesCallable(self.anotherCallable)
funcThatTakesCallable(lambda arg: sys.stdout.write('%s\n' % arg))
def anotherCallable(self, arg):
print 'another', arg
The major difference is that the anonymous form of a function (lambda)
isn't allowed to contain statements, only an expression. This is
rather crippling for Smalltalk/Ruby style coding and seems to lead to
warts like list comprehensions instead of having simple methods in the
collection interface that takes a block/lambda and calls this for each
element of the collection.
Example:
newCollection = [each for each in collection if each != 'Sausage']
newCollection = collection.select(lambda each: each != 'Sausage')
More information about the Python-list
mailing list