def func_load(code, defaults=None, closure=None, globs=None):
    """
    Reload a function
    :param code: The code object
    :param defaults: Default values
    :param closure: The closure
    :param globs: globals
    :return:
    """
    if isinstance(code, (tuple, list)):  # unpack previous dump
        code, defaults, closure = code
    code = marshal.loads(code)
    if closure is not None:
        closure = func_reconstruct_closure(closure)
    if globs is None:
        globs = globals()
    return types.FunctionType(code, globs, name=code.co_name, argdefs=defaults, closure=closure)