def dissociate(op, args):
    """Given an associative op, return a flattened list result such
    that Expr(op, *result) means the same as Expr(op, *args)."""
    result = []
    def collect(subargs):
        for arg in subargs:
            if arg.op == op: collect(arg.args)
            else: result.append(arg)
    collect(args)
    return result
def dissociate(op, args):
    """Given an associative op, return a flattened list result such
    that Expr(op, *result) means the same as Expr(op, *args)."""
    result = []
    def collect(subargs):
        for arg in subargs:
            if arg.op == op: collect(arg.args)
            else: result.append(arg)
    collect(args)
    return result
def dissociate ( op , args ) : result = [ ] def collect ( subargs ) : for arg in subargs : if arg . op == op : collect ( arg . args ) else : result . append ( arg ) collect ( args ) return result
Given an associative op, return a flattened list result such
    that Expr(op, *result) means the same as Expr(op, *args).
Given an associative op return a flattened list result such that Expr ( op * result ) means the same as Expr ( op * args ) .