On Thu, Nov 12, 2020 at 09:40:02PM +0300, Paul Sokolovsky wrote:
> match foo:
> case ("foo", >val1):
> ...
> case ("bar", >val2):
> ...
> 1. Much more intuitive for beginners. (If Python adopts it, I see
> other "user-friendly" languages adopting the same pattern in the
> coming decades).
I think you and I have a very different concept of "intuitive for
beginners" here. I don't think that using the *greater than symbol* as a
sigil for assignment would have been "intuitive" to me as a beginner, or
anyone I have helped teach over the years.
To me, that statement clearly and obviously could only mean one possible
thing:
* match a two-sequence where the first item equals "foo" and the
second is greater than `val1`;
(and similarly for the second case statement).
Are there any other languages that use `>` as a prefix sigil to indicate
assignment?
If we were to use a sigil to represent binding, surely `=` would make
more sense than `>`.
> 2. Upholds the rights of people who see "match" as glorified "switch"
> statement,
There is no right for people to dictate that syntax must support their
misapprehensions about language features. Or for that matter, no right
to dictate *anything* about syntax. There is no universal human right to
dictate Python syntax.
The best you have is the privilege to attempt to persuade others to
support your preference, and for the Steering Council to be swayed by
your arguments and/or the popular support for your preference.
> and not keen on it doing assignments behind their backs. (The
> topic which was recently mentioned on the list.)
How is it doing assignments behind your back? The syntax is clear: a
name is a binding pattern. That is as much an explicitly assignment
statement as import, for, with...as, def or class.
This is an assignment "behind your back":
def sneaky_assignment():
global x
x = 999
sneaky_assignment()
There's nothing in the call to `sneaky_assignment` to hint that it
assigns a value to the global `x`. Pattern matching is nothing like
that: all binding patterns are explicit, all you need is to get past the
misapprehension that pattern matching is a switch statement (it isn't!)
and it will be clear as daylight:
case 1, x: pass
Of course x gets assigned to. It's a binding pattern.
import sys
Of course sys gets assigned to. It's an import.
> 3. Solves discrepancy with cases like:
>
> # Why is this possible?
> obj.foo, obj.bar = val
>
> # And this is not?
> match val:
> case obj.foo, obj.bar:
I agree with this. I think it is surprising that unqualified names are
binding patterns but qualified names are not. That difference gives me
pause. But using `>` as an assignment sigil is surely worse than the
problem you hope to solve with it.
--
Steve
_______________________________________________
Python-Dev mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-dev.python.org/
Message archived at
https://mail.python.org/archives/list/[email protected]/message/NRRD2FZYWIOWMQ7KQRAKISIUDNC56OTV/
Code of Conduct: http://python.org/psf/codeofconduct/