On Wed, Feb 20, 2019 at 10:24:25AM -0800, Bruce Leban wrote:
> Here's a syntax that solves this using the new operators _:= and ,_
Be careful about making such dogmatic statements.
Language design is not a matter of picking random syntax and claiming
that it solves the problem -- especially when it doesn't solve the
problem.
Putting aside the aethestics of your suggestions (I think they are as
ugly as sin), both of them are currently legal code, since a single
underscore _ is a legal identifier. Starting in 3.8, _:= is the left
hand side of an assignment expression assigning to the variable "_", so
your suggestion:
_:= a
already has meaning in Python. That's a new feature, and you can be
forgiven for perhaps not knowing about it. But the second suggestion is
a very old feature, going back to Python 1 days. ,_ is part of a tuple
or argument list including a variable called "_".
You probably could have discovered this for yourself by trying something
like this in the interactive interpreter:
py> x = []
py> x,_.append(1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'tuple' object has no attribute 'append'
The actual result you would get (an exception, or a tuple) will depend
on the history of your current session, but whatever result you get it
will show that it is already legal syntax. That means that there's going
to be an ambiguity between your hoped-for semantics and the existing
semantics:
_:= a ,_.b
would mean a tuple with two items:
_:= a
_.b
rather than a chained method call as you hoped.
> a = [1,2,3]
> ( _:= a ,_ .append(4) ,_ .sort() )
>
>
> Personally, I find this a bit harder to read on one line and would break it
> up like this:
>
> (_:= a
> ,_ .append(4)
> ,_ . .sort()
> )
That's currently legal code which assigns a to _ then builds a tuple (or
at least attempts to build a tuple) consisting of:
a
None
None
after calling a.append and a.sort.
But there's a deeper problem with this entire concept, regardless of
syntax, one which to my knowledge nobody has mentioned yet: it simply
isn't compatible with the way operators work in Python at the moment.
More on this in another post (coming soon).
--
Steven
_______________________________________________
Python-ideas mailing list
[email protected]
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/