[Python-ideas] Allowing def to assign to anything

Alexander Heger python at 2sn.net
Mon Oct 26 04:57:29 EDT 2015


how about

class Dispatch(object):
    @staticmethod
    def foo(bar):
        return bar * bar
    def __getitem__(self, key):
        return self.__getattribute__(key)
dispatch = Dispatch()

>>> test.dispatch['foo'](2)
 4

this leaves the module namespace less polluted.

-Alexander


On 26 October 2015 at 18:27, Ian Kelly <ian.g.kelly at gmail.com> wrote:
>> On Sun, Oct 25, 2015 at 11:02 PM, Alexander Walters
>> <tritium-list at sdamon.com> wrote:
>>>
>>> In my code, I write a lot of dispatch dictionaries (for lack of a switch
>>> statement, but I will not hold my breath for that).  In trying to make
>>> writing these dictionaries less annoying, I tend to use many lambdas.  I can
>>> let you guess at what problems that has resulted in.  Of course, the
>>> preferred way to write such dictionaries is by using a regular function, and
>>> adding that function to a dictionary.  This isn't exactly a problem - it
>>> works, and works well, but it is annoying to write, and leaves artifacts of
>>> those functions in module scope.  I propose a little bit of sugar to make
>>> this a little less annoying.
>>>
>>> If `def` is allowed to assign to anything (anything that is legal at the
>>> left hand side of an = in that scope), annoying artifacts go away.  The
>>> syntax I propose should be backwards compatible.
>>>
>>> ```
>>> dispatch = {}
>>>
>>> def dispatch['foo'](bar):
>>>     return bar * bar
>>> ```
>
> What about:
>
> def foo(bar)[baz](x):
>     return x
>
> This seems like it would complicate parsing as the parser can't be
> sure whether (bar) is a parameter list or an argument list until it
> reaches the following [baz].
> _______________________________________________
> Python-ideas mailing list
> Python-ideas at python.org
> https://mail.python.org/mailman/listinfo/python-ideas
> Code of Conduct: http://python.org/psf/codeofconduct/


More information about the Python-ideas mailing list