def attr_accessor_indirection(name): get1 = intern('get_' + name) set1 = intern('set_' + name) def get(instance): return getattr(instance, get1)() def set(instance, value): getattr(instance, set1)(value) return property(get, set) def split2(split_value, string): # split2('\n', 'foo\n\nbar\n') -> [ 'foo', '\n', '\n', 'bar', '\n' ] done = False result = [] while not done: i = string.find(split_value) if i == -1: if string: result.append(string) done = True else: result.append(string[:i]) result.append(split_value) string = string[i + len(split_value):] return result def join_list(join_value, list): # join_list(foo, [bar, baz, monkey]) -> [bar, foo, baz, foo, monkey] result = [] for x in list: result += [x, join_value] return result[:-1] def flatten_list(lst): for i in xrange(len(lst)-1, -1, -1): if type(lst[i]) is list: lst[i:i+1] = flatten_list(lst[i]) return lst