我正在编写一个函数,它接受一个迭代器、一个 int 和一个填充,如果迭代的值少于 n 个值,则在末尾添加一个填充。我能够让该函数完全针对迭代器参数运行不是生成器类型,如果是生成器类型,则会引发打字错误异常,我将在该代码块中处理生成器。问题是我能够生成生成器内的所有值,但由于外部 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
所以我按如下方式调用这个函数
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 值
最佳答案
我认为尝试 __getitem__
没有任何好处方法并回到迭代器协议(protocol)。只需使用可迭代,这甚至是变量的名称!
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??'
关于python - 迭代生成器时调用 iter 和 next,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23331585/