def numbered(obj, n, default=None):
    '''
    obj - итератор (или итерируемый объект)
    n - число объектов, которое нужно вернуть за раз
    default - дефолтное значение для отсутствующих элементов
    '''
    if not hasattr(obj, '__next__'):
        try:
            obj = iter(obj)  # если не является итератором, оборачиваем через iter
        except Exception as exc:
            raise ValueError('obj must be an iterator or iterable') from exc
    flag = True
    while flag:
        out = []
        for step in range(n):
            try:
                out.append(next(obj))
            except StopIteration:
                if out:
                    more = [default for _ in range(n-step)]
                    out.extend(more)
                    yield out
                flag = False
                break
        else:
            yield out