如何使用enumerate装饰?今天番茄加速就来讲一下。
enumerate装饰
for i, it in enumerate(iterators):
…
iterators[i] = repeat(fillvalue)
enumerate装饰后会得到一个由index和元素本身组成的tuple,举个例子:
In [1]: for i,ele in enumerate([9,4,2,5,8]):
…: print((i,ele))
…:
(0, 9)
(1, 4)
(2, 2)
(3, 5)
(4, 8)
此处使用enumerate,因后面先遍历完的iter(a),为保证和iter(b)个数对齐,需要填充fillvalue值,需要知道a的index,此处为0.
捕获迭代终止异常
try:
value = next(it)
except StopIteration:
…
try… except是异常捕获的标准模板,next(it)第一次执行返回it的第一个元素,a=[1,2,3],所以value值为1.
计数
num_active表示当前存活的列表个数,一旦一个列表迭代到终点,num_active立即减1
num_active -= 1
repeat
iterators[i] = repeat(fillvalue)
repeat是itertools模块内另一个函数,如果times为默认值,则表示重复无限次,此处是一个repeat的典型用法。此处稍加注意,不要以为times参数默认值为1,或者不理解为什么要无限次重复,记住这种用法。
此处,repeat返回一个无限次重复fillvalue值的迭代器,并赋值给此时触发StopIteration异常的列表。此处就是iter(a),令其指向repeat创建的迭代器。
yield返回值
value = fillvalue
values.append(value)
yield tuple(values)
第一句,是在触发StopIteration时,将默认值fillvalue赋给value,values保存住列表对齐后位置的元素,第一次for退出时,values内值为[1,4]
本文介绍了Python中enumerate装饰的使用,装饰后会得到由index和元素组成的tuple。还讲解了捕获迭代终止异常的方法,使用try…except模板。此外,涉及计数、repeat函数的用法,以及yield返回值的操作,帮助理解列表对齐等相关内容。
5万+

被折叠的 条评论
为什么被折叠?



