On Wed, May 18, 2016 at 10:15 PM, Guido van Rossum
I guess the tuple structure matching idea is fairly easy to grasp.
The attribute idea would be similar to a duck-type check, though more emphasizing data attributes. It would be nice if we could write a match that said "if it has attributes x and y, assign those to local variables p and q, and ignore other attributes". Strawman syntax could be like this:
def demo(arg): switch arg: case (x=p, y=q): print('x=', p, 'y=', q) case (a, b, *_): print('a=', a, 'b=', b) else: print('Too bad')
That the first case would match attributes and not named items seems surprising to me. That is, just by looking at it I would have expected it to match {'x': 1, 'y': 2}. This feels more in line with the way that keyword arguments work, and more consistent with the second case in that both would be matching contents of collections.