better lambda support in the future?

Nick Coghlan ncoghlan at iinet.net.au
Sat Dec 18 03:50:52 EST 2004


Terry Reedy wrote:
> To avoid the redundancy of 'a' and '_a', etc, how about (untested):
> 
> def dispvia(f):
>   dispatch[f.__name__.split('_')[1]] = f
>   return f

A similar idea:

Py> class DispatchTable(dict):
...   def __init__(self, prefix=""):
...     self._prefix = prefix
...     self._ignored = len(prefix)
...   def registerAs(self, name):
...     def _ (f):
...       self[name] = f
...       return f
...     return _
...   def register(self, f):
...     name = f.__name__
...     _ignored = self._ignored
...     if name[:_ignored] == self._prefix:
...       name = name[_ignored:]
...     self[name] = f
...     return f
...
Py> dispatcher = DispatchTable("handle_")
Py> @dispatcher.register
... def handle_a(): pass
...
Py> @dispatcher.register
... def b(): pass
...
Py> @dispatcher.registerAs("c")
... def f(): pass
...
Py> for t in sorted(dispatcher.items()): print '%5s: %r'%t
...
     a: <function handle_a at 0x009D8930>
     b: <function b at 0x009D85B0>
     c: <function f at 0x009D8830>

-- 
Nick Coghlan   |   ncoghlan at email.com   |   Brisbane, Australia
---------------------------------------------------------------
             http://boredomandlaziness.skystorm.net



More information about the Python-list mailing list