def unpack_args(func: Callable, *args, **kwargs):
    '\n    Returns a function that takes an iterable and unpacks it while calling ``func``.\n\n    ``args`` and ``kwargs`` are passed to ``func`` as additional arguments.\n\n    Examples\n    --------\n    >>> def add(x, y):\n    >>>     return x + y\n    >>>\n    >>> add_ = unpack_args(add)\n    >>> add(1, 2) == add_([1, 2])\n    >>> True\n    '

    def wrapper(xs, *args_, **kwargs_):
        return func(*xs, *args_, *args, **kwargs_, **kwargs)
    return wrapper
Returns a function that takes an iterable and unpacks it while calling ``func``.

``args`` and ``kwargs`` are passed to ``func`` as additional arguments.

Examples
--------
>>> def add(x, y):
>>>     return x + y
>>>
>>> add_ = unpack_args(add)
>>> add(1, 2) == add_([1, 2])
>>> True
def unpack_args(func: Callable, *args, **kwargs):
    '\n    Returns a function that takes an iterable and unpacks it while calling ``func``.\n\n    ``args`` and ``kwargs`` are passed to ``func`` as additional arguments.\n\n    Examples\n    --------\n    >>> def add(x, y):\n    >>>     return x + y\n    >>>\n    >>> add_ = unpack_args(add)\n    >>> add(1, 2) == add_([1, 2])\n    >>> True\n    '

    def wrapper(xs, *args_, **kwargs_):
        return func(*xs, *args_, *args, **kwargs_, **kwargs)
    return wrapper