[Python-Dev] PEP 572 semantics: all capabilities of the assignment statement (original) (raw)
Tim Peters tim.peters at gmail.com
Thu Jul 5 00:06:37 EDT 2018
- Previous message (by thread): [Python-Dev] PEP 572 semantics: all capabilities of the assignment statement
- Next message (by thread): [Python-Dev] PEP 484
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
[Ivan Pozdeev]
Victor Stinner in "Assignment expression and coding style: the while True case" and others have brought to attention
that the AE as currently written doesn't support all the capabilities of the assignment statement, namely: * tuple unpacking * augmented assignment (I titled the letter "all capabilities" 'cuz I may've missed something.) Assignment statements (and
for
headers) also allow arbitrarily complex applications of subscripting and attribute references. Like
for a[b].cde[f, g(h, i, j)].k in range(10):
Should it?
Already been considered and rejected, so no.
Victor already showed why, but didn't quite realize it ;-)
while True: name, token = _getname(g) if not name: break
Allowing to unpack the two names in an AE wouldn't really help, because
there's still no satisfying way then to reference just the name
part in
the while
test:
while ((name, token) := _getname(g)) ... and now what??
You could use "a trick", relying on that a 2-tuple is always truthy:
while ((name, token) := _getname(g)) and name:
Using a trick sucks. Not relying on a trick is ugly and inefficient:
while [((name, token) := _getname(g)), name][-1]:
or while [((name, token) := _getname(g)), name].pop():
where the thing to be tested is the second list element (e.g., name == "not done yet"
).
So no plausible use cases were ever presented, and the idea was dropped.
If we also added something akin to C's comma expressions (evaluate a sequence of expressions and throw away all the results except for the last), then a reasonable spelling akin to the last one above could be used, but without the strained cruft to muck with a result list (or tuple).
At which point my rule for AE would likely never trigger ("if it's not obviously better, don't use it"). -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://mail.python.org/pipermail/python-dev/attachments/20180704/accaba9e/attachment.html>
- Previous message (by thread): [Python-Dev] PEP 572 semantics: all capabilities of the assignment statement
- Next message (by thread): [Python-Dev] PEP 484
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]