[Tim]
See reply to Glenn. Can you give an example of a dotted name that is not a constant value pattern? An example of a non-dotted name that is? If you can't do either (and I cannot)), then that's simply what "if
[Rhodri James <rhodri@kynesim.co.uk>]
case long.chain.of.attributes:
[Tim]
That's a dotted name and so is a constant value pattern - read the PEP.
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).
[Rhodri]
Then I am surprised, which is worse. "long.chain.of.attributes" looks like an assignment target, and I would have expected the case to have been a name pattern.
As always, I don't care whether something is obvious at first glance. I care whether something can be learned with reasonable effort, and "sticks" _after_ it's learned. There's essentially nothing truly obvious about programming. This, from the PEP, is the entire grammar for a "name pattern'" name_pattern: NAME !('.' | '(' | '=') That's it. A plain name not followed by a dot, left paren, or equality sign. While it may or may not surprise any given person at first glance, it's very simple. Put a fraction of the effort into learning it as you're willing to expend on articulating surprise, and it would already be far behind you ;-)