better lambda support in the future?

Steven Bethard steven.bethard at gmail.com
Fri Dec 17 17:38:56 EST 2004


Fredrik Lundh wrote:
> Steven Bethard wrote:
> 
>>I've seen at least one reasonable example of this kind of thing:
>>
>>http://mail.python.org/pipermail/python-list/2004-October/245432.html
> 
> the code he's referring to doesn't seem to use that construct anymore, so
> it's not obvious what "dejavu.icontains" etc really is, but assuming they're
> strings, the following is a reasonable lambda-free alternative:
> 
> class xforms:
>     def icontains(self, x, y): return x + " Like '%" + y[1:-1] + "%'"
>     def icontainedby(self, x, y):
>         # icontainedby body goes here instead of in a separate function
>     def istartswith(self, x, y): return x + " Like '" + y[1:-1] + "%'"
>     def iendswith(self, x, y): return x + " Like '%" + y[1:-1] + "'"
>     def ieq(self, x, y): return x + " = " + y
>     def now(self): return "Now()"
>     def today(self): return "DateValue(Now())",
>     def year(self, x): return "Year(" + x + ")"
>     def dispatch(self, tag, *args):
>         return getattr(self, tag)(*args)

This doesn't work if the strings aren't valid Python identifiers (e.g. 
"!CONTAINS!").  On the other hand, if they are (and you can be 
guaranteed that they will continue to be), then your solution above is 
nice, though  if you want to fully reproduce the behavior, you probably 
also want the method

def __getitem__(self, item):
     return getattr(self, item)

Steve



More information about the Python-list mailing list