在迭代生成器时调用iter和next

时间:2014-04-28 02:27:00

标签: python iterator generator yield

我正在编写一个函数,如果迭代的内容少于n个值,则在迭代器中添加一个int和一个填充,我将能够使函数完全用于迭代器参数。不是类型生成器,如果是,它会引发typerror异常,我将在该代码块中处理生成器。问题是我能够生成生成器内的所有值,但我无法找到一种方法来在末尾添加填充,因为外部for循环干扰。我需要通过调用iter来实现这一点,接下来我一直在玩它但是它还没有工作......这是函数生病解释

def n_with_pad(iterable,n,pad=None):

    for i in range(n):   
        try:
            yield iterable[i]

        except IndexError:
            yield pad

        except TypeError:
            for i in iterable: 
                yield i

所以我将此功能称为以下

for i n_with_pad('function',3):
    print(i,end=' ')

我会打印:'f''u''n'

但是添加具有少于n个值的迭代的pad将打印如下

for i n_with_pad('abcdefg',10,'?'):
    print(i,end=' ')

'a','b','c','d','e','f','g','?','?'和'?'

第二次通话我能够起床 'a','b','c','d','e','f','g' 用我到目前为止的代码但似乎无法添加???满足n值

1 个答案:

答案 0 :(得分:1)

我认为尝试__getitem__方法并回退到迭代器协议没有任何好处。只需使用iterable,即使是变量的名称!

def n_with_pad(iterable,n,pad=None):
    it = iter(iterable)
    for _ in range(n):   
        yield next(it,pad)

演示:

''.join(n_with_pad('function',3,pad='?'))
Out[6]: 'fun'

''.join(n_with_pad('function',10,pad='?'))
Out[7]: 'function??'