说明:next()、iter()这两个函数一般配套使用。下面先介绍用法,后说明用途。
用法:
- iter( object ):生成可迭代对象的迭代器;object必须是可迭代对象,比如list、tuple、dict等;
- next( iter, end_num ):每执行一次,按顺序每次从迭代器中提取一个元素。如果没有第2个参数时,当从迭代器中取完所有元素后会报StopIteration错误,提示已取完;若有第2个参数,超出运行部分会一直打印end_num这个东西而不报任何错误。
b = [1,3,4,5]
b = iter(b) # 获得可迭代对象的迭代器
for x in range(8):
print( next(x) ) # 每执行一次next()函数,就依次抽一个元素出来
# 结果:
1
3
4
5
---------------------------------------------------------------------------
StopIteration Traceback (most recent call last)
<ipython-input-30-a8068fff7e9c> in <module>
2 b = iter(b)
3 for x in range(8):
StopIteration:
b = [1,3,4,5]
b = iter(b) # 获得可迭代对象的迭代器
for x in range(8):
print( next(x, -2) ) # 超出部分,都取-2
# 结果:
1
3
4
5
-2
-2
-2
-2
用途:其实next( iter(object) )就是从可迭代对象object中依次取元素,和直接用索引来取元素没有本质的区别。但是这种取法的好处就是next()会自动帮你记录已经取到第几个了!无论何地使用这条语句,它都会自动继续帮你往下取值!—— 即:不用多次记该取第几个索引值了。
distdepth中代码
try:
#从验证数据集中依次取出数据
inputs = next(self.val_iter)
except StopIteration:
#如果迭代完成,从头开始迭代???
self.val_iter = iter(self.val_loader)
inputs = next(self.val_iter)
1)init部分------加载数据集进来----创建迭代器对象
2)eval_save部分
参考文章:
https://www.jianshu.com/p/aa6b17d303e9
标签:val,迭代,python,object,iter,next,StopIteration From: https://blog.51cto.com/u_12074581/6081624