Return Styles: Pseud0ch, Terminal, Valhalla, NES, Geocities, Blue Moon. Entire thread

Go to work

Name: Anonymous 2011-10-19 13:03

If someone added braces, switches, static and private, protected, ... to Python I would use it.

Name: Anonymous 2011-10-19 17:08

Python already has switch:

import re

def indent(line):
    return len(line) - len(line.lstrip(' '))

class switch:
    def __init__(self, arg):
        self.arg = arg
    def __call__(self, code):
        code = code.split('\n')[1:-1]
        case_indent = indent(code[0])
        code_indent = indent(code[-1])
        cases = {}; current = None
        for i in code:
            if indent(i) == case_indent:
                if i[case_indent:] == 'else:':
                    current = None
                else:
                    m = re.match(r'case (.*)\.\.(.*):', i[case_indent:])
                    if m:
                        current = xrange(eval(m.group(1)), eval(m.group(2)))
                    else:
                        m = re.match(r'\s*case (.*):', i)
                        current = eval(m.group(1))
                        if type(current) != tuple:
                            current = (current,)
            elif indent(i) == code_indent:
                cases.setdefault(current, []).append(i[code_indent:])
        for k, v in cases.items():
            if k and self.arg in k:
                exec '\n'.join(v) in globals()
                break
        else:
            exec '\n'.join(cases[None]) in globals()
               
def foo(x):
    switch(x) ('''
        case 10..19:
            y = 'ten'
        case 20..29:
            y = 'twenty'
        case 400, 500:
            y = 'cool'
        else:
            y = 'nope'
    ''')
    return y
print foo(500)

Newer Posts
Don't change these.
Name: Email:
Entire Thread Thread List