在遍历gen时调用iter和next

2021-05-13 14:10:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个函数,它在迭代器、int和结尾处添加一个padding,如果被迭代的值小于n个。。我能够让函数完全为迭代器参数工作,如果不是generator类型,那么它将引发typeerror异常,我将在代码块中处理生成器。问题是,我能够在生成器中生成所有值,但我无法找到在末尾添加填充的方法,因为外部for循环会干扰。我需要通过调用iter和next来实现这一点,我一直在玩,但它一直没有工作。。。这是我要解释的函数

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

正如我所说的那样

^{pr2}$

我会打印:“f”“u”“n”

但是在pad中添加值小于n的iterables将打印如下

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条回答
网友
1楼 ·

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

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

演示:

^{pr2}$

相关问题