Do you mean it will call `iter` automatically?
This function does not work as it will always return the first 3 items:

    >>> def batch(iterable, size):
    ...     batch = list(islice(iterable, size))
    ...     while batch:
    ...         yield batch
    ...         batch = list(islice(iterable, size))
    ...
    >>> gen = batch([0,1,2,3,4,5,6,7,8,9], 3)
    >>> gen.next()
    [0, 1, 2]
    >>> gen.next()
    [0, 1, 2]