".NAME" grated at first, but extends the idea that dotted names are always constant value patterns to "if and only if". So it has mnemonic value. When context alone can't distinguish whether a name is meant as (in effect) an lvalue or an rvalue, no syntax decorations can prevent coding errors. Names in destructuring constructs are overwhelmingly intended as lvalues, so adding extra cruft to say "no, I meant rvalue" is the pragmatic choice.
[Glenn Linderman firstname.lastname@example.org]
This is just a bunch of words to me, without meaning.
I'd like to understand it.
Did you read the PEP?
What do you mean by "the idea that dotted names are always constant value patterns"?
Under the PEP's "Constant Value Pattern" section:
Every dotted name in a pattern is looked up using normal Python name resolution rules, and the value is used for comparison by equality with the matching expression (same as for literals).
That's what I meant. "Contains a dot" implies "constant value pattern".
What do you mean by 'extends (the above) to "if and only if" '?
Because the next sentence from the PEP:
As a special case to avoid ambiguity with name patterns, simple names must be prefixed with a dot to be considered a reference:
completes turning "contains a dot" into a necessary and sufficient ("if and only if") condition for distinguishing a constant value pattern from a name pattern. Where "constant value pattern" and "name pattern" are again used with the PEP's meanings.
As a result of not understanding the above, I see no mnemonic value.
While I do. "If I want `xyz` to be interpreted as a constant value pattern, it needs to contain a dot: `.xyy` should do it. If I want `enums.HI` to be interpreted as a constant value, it already contains a dot, so it will be."
My understanding of the "." as proposed is that it is optional, except in cases where it would be ambiguous... seems like it would be better if it were required for one case or the other, so that there would be no need to determine whether or not it is ambiguous by the surrounding state/code/declarations.
A dot is required, when and only when you want the chunk of syntax to be interpreted as a constant value pattern. I said nothing at all about "_leading_" dots, which appear to be all you have in mind there. _Some_ dot is mandatory to make it a constant value pattern; a _leading_ dot may or may not be required.