[Python-ideas] Allowing def to assign to anything

Alexander Walters tritium-list at sdamon.com
Mon Oct 26 02:02:00 EDT 2015


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
```

Does this make anything possible that is impossible now?  No.  But it 
does make the intent of the module author clear - the function is only 
ever intended to live inside that dict, or list, or other structure.  
This, to me, is less annoying to write, and is more readable.  This 
obviously could be used outside of creating dispatch dictionaries, but 
that is the use case I would benefit from.


More information about the Python-ideas mailing list