On 20 April 2014 04:17, Bruce Leban bruce-at-leapyear.org |python-ideas-at-python.org| <vajg1g2cqt@sneakemail.com> wrote:

I found that the ugliest part of your proposal since it hides the first case and at the same time makes it appear special when it isn't.

Myabe yes, but if you "translate" it in an if-elif, also the if seems to be "special".
 

The indentation isn't required with my little Case class. The following works just as well but lacks the visible scoping that the with statement provides (of course the scope of the case variable leaks in either version, but I could modify my class to fail if invoked after __exit__ or __del__)..

for i in range(5):
    print(i, end=' => ')
    case = Case(i)
    if case(1):
        print('one')
    elif case((2,3)):
        print('tuple(two, three)')
    elif case(2, 3):
        print('two or three')
    elif case > 3:
        print('more than three')
    else:
        print('unmatched')

Ok, but you have to nest it inside a for loop. Your class is a good solution, but a new syntax does not need nesting in a with or a for statement.