Re: [Python-ideas] Allowing def to assign to anything
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
On Sun, Oct 25, 2015 at 11:02 PM, Alexander Walters
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@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/
participants (1)
-
Alexander Heger