import operator
import functools


def combine(*args, func=operator.add, initializer=None):
    """
    Like `sum` but doesn't start with 0; good for classes with custom __add__ behavior.
    
    """
    
    if len(args) == 1:
        args = args[0]
    
    # damn thing only takes positional arguments
    if initializer is None:
        return functools.reduce(func, args)
    
    return functools.reduce(func, args, initializer)