def iterable_method_call(iterable, method, unpack, *args):
    """Call a method on each element of an iterable


    iterable[i].method(arg)

    Parameters
    ----------
    iterable : sequence etc.
        Iterable whos members will have thier attribute changed.
    method : string
        Method to call.
    unpack : bool
        If True then each member of `*args` will be unpacked before passing to
        method.
    *args : positional arguments
        If a single positional argument then all members of `iterable`
        will have their method called with the same single argument.
        If more that one positional argument then
        iterable[0].method will be called with args[0],
        iterable[1].method will be set to args[1] etc.
        Skip elements by having corresponding value of *args=None.

    """
    if len(args) == 0:
        for i in iterable:
            getattr(i, method)()
        return
    if len(args) == 1:
        if not args[0] is None:
            if unpack:
                for i in iterable:
                    getattr(i, method)(*args[0])
            else:
                for i in iterable:
                    getattr(i, method)(args[0])
        return
    if len(args) > 1:
        for i, a in enumerate(args):
            if unpack:
                if not a is None:
                    getattr(iterable[i], method)(*a)
            elif not a is None:
                getattr(iterable[i], method)(a)
        return
