Hello everyone, this is my first crack at commenting on a PEP, so apologies for 
mistaking any developer colloquialisms, or if this is the wrong channel to go 
through.

In a nutshell, I was mulling over my initial difficulty in understanding name 
patterns and had the thought of ‘declaring’ so-called ‘placeholder’ variables 
at the beginning of the match block, so that the reader is ‘primed’ for their 
use throughout:

x_literal = a_value
y_literal = another_value

match point:
        proxy x, y
        case (x_literal, y):
                print(f”Y={y} at literal X”)
        case (x, y_literal):
                print(f”X={x} at literal Y”)
        case (x_literal, y_literal):
                print(“That is the literal point”)
        case (x, y):
                print(f”Arbitrary point: X={x}, Y={y}”)
        case _:
                raise ValueError(“Not a point”)

The use of ‘proxy’ instead of ‘placeholder’ is simply an attempt at brevity 
without diverging substantially from the meaning.

The use of a placeholder variable reminded me a lot of comprehensions, which 
are explicit in where  placeholders come from, but only towards the end of the 
comprehension:
        y = [f(a, b) for a, b in iterable]
A contrasting example is the lambda function, which ‘declares’ its placeholders 
upfront:
        y = map(lambda x, y: f(x, y), iterable)
In reading these two examples left to right, I believe that it is easier to 
understand the lambda function in a first pass, whereas the list comprehension 
often requires looking back at the expression after reading the ‘for’ clause at 
the end. This difference in first-pass understanding becomes more apparent when 
the expression or function is more complex. In this vein, ‘declaring’ 
placeholder variables upfront makes sense to me when the context in which they 
can be used is (relatively) large and not self-contained.

Now, this does add “new syntax”, which is addressed in the ‘Alternatives for 
constant value pattern’ section of the PEP; but in reading this thread, it 
seems like such a solution remains appealing. For myself, a one-off 
‘declaration’ with a reasonably unambiguous keyword like proxy makes the code 
easier to follow as one reads through it, without the need for variables to be 
typed out differently (consistent with all other variable usage).

I reckon something like this idea would improve comprehensibility (not just raw 
readability) and is more in line with other prose-like constructs in Python 
(try/except, with, and/or).  This is particularly important for people that are 
new to either this feature (everyone at first), or the language as a whole.

Not being all too familiar with CPython implementation details myself, my idea 
is certainly open to technical critique (and of course qualitative 
impressions). As a bit of a stab in the dark, ‘proxy’ could be a soft keyword 
within a match block, similar to ‘match’ being a soft global keyword.
_______________________________________________
Python-Dev mailing list -- python-dev@python.org
To unsubscribe send an email to python-dev-le...@python.org
https://mail.python.org/mailman3/lists/python-dev.python.org/
Message archived at 
https://mail.python.org/archives/list/python-dev@python.org/message/FRC5ZNXQPWWA4D2SJM4TYWMN5VALD3O6/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to