
On Wed, Oct 03, 2018 at 06:57:19AM +0200, Anders Hovmöller wrote:
debug(next=value+1)
Still shorter than the proposed syntax
Are we trying to emulate Perl now? *wink*
and much more readable.
So you say. To me that looks like a regular function call, which calls an ordinary function "debug" and takes a simple keyword argument next with value "value+1". Things which contain compiler magic should look special, not like ordinary function calls.
AIUI, keyword arguments are all supposed to be legal names/atoms, so you aren't supposed to do something like this:
debug(**{"value+1":value+1})
Really? That seems pretty weird to me. I’ve used that type of thing in production code from time to time.
The fact that this works is, I think, an accident of implementation: py> def spam(**kw): ... print(kw) ... py> spam(**{"value+1": 42}) {'value+1': 42} rather than a guaranteed language feature. I can't find any relevent documentation on it, but I'd be very wary about relying on it. (To be honest, I expected it to fail until I tried it.) You certainly can't do this: py> spam(value+1=42) File "<stdin>", line 1 SyntaxError: keyword can't be an expression -- Steve