On Thu, Sep 17, 2020 at 09:16:46PM +0200, Alex Hall wrote:
> On Thu, Sep 17, 2020 at 8:57 PM Brendan Barnwell <brenb...@brenbarn.net>
> wrote:
> >         I don't like this at all.  It looks like assigning to a literal,
> > which
> > is weird.
> 
> 
> People keep saying this, but iterable unpacking looks like assigning to a
> literal (a tuple or list literal) just as much.

Tuples and lists don't have literals, they have *displays*. You won't 
find them here:

https://docs.python.org/3/reference/expressions.html#literals

nor here:

https://docs.python.org/3/reference/lexical_analysis.html#literals

(although you will find f-strings, which I think is wrong, but I imagine 
that there will be a *huge* amount of pushback if I suggest we move 
f-strings to another section).

Tuples are here:

https://docs.python.org/3/reference/expressions.html#parenthesized-forms

and list, set and dict displays immediately afterwards here:

https://docs.python.org/3/reference/expressions.html#displays-for-lists-sets-and-dictionaries


If there is anything that might justify the name "tuple (or list) 
literal" it would be a tuple with each item a literal:

    (1, "a", None)

but certainly not one containing expressions or names:

    (spam+1, eggs(), aardvark.cheese)

While we can use a tuple (or list) of *names* as an assignment target, 
we cannot use a tuple of literals as a target:

    (1, 2, 3) = (4, 5, 6)  # SyntaxError


> > Also, it hides the assignment target within a string of
> > potentially unbounded length and complexity, which makes it difficult to
> > reason about code because it's hard to see when variables are being
> > assigned to.
> 
> 
> It's really not. A decent IDE should already be able to automatically show
> you assignments and usages of a variable - PyCharm does with one
> Ctrl+click. A syntax highlighter that can handle f-strings will make the
> assignments obvious at a glance.

"A decent IDE" is not mandatory for writing Python code, and I would 
object strongly to making it so. We should be able to write code in 
Notepad, if no better alternative presents itself.

The beauty of Python is that it is a relatively simple language that 
encourages code that is neither complex nor complicated. If syntax 
encourages complex, complicated code that requires an IDE to make sense 
of, that counts as a point against the syntax.

That's not to deny that we can write obfuscated code in any language, 
but we shouldn't encourage it :-)

Having said that, I don't actually agree that Brendan's point will be a 
major risk. This proposed feature is more or less the same as scanf, and 
I don't think people are in the habit of writing fifty thousand word 
scanf templates :-)

And if they do, oh well, concenting adults apply.

The advantage, as I see it, of special syntax is that it could 
implicity assign to the named targets. We don't actually need *f* 
strings for that, we don't even need strings:

    the {spam} and {eggs} was eaten by the {aarvark} = scanf(string)
    # automatically assigns to spam, eggs, aardvark

could work, although it would be hard to match non-printable characters 
or special characters that need to be escaped, like newlines. It would 
also be difficult to do any sort of error handling: what if only a 
subset of targets match?



-- 
Steve
_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/python-ideas@python.org/message/J5T6GQWUCIFCCQTGBMDJWCNBPHEGM4JV/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to