python中可迭代的对象和列表
其中序列和字典我们比较熟悉,在for循环中,我们经常碰到。
但很多时候我们也会见到for后面接的不是序列和字典。
for data in train_dataloader:
inputs, labels = data
inputs = inputs.to(device)
labels = labels.to(device)
preds = model(inputs)
loss = criterion(preds, labels)
epoch_losses.update(loss.item(), len(inputs))
optimizer.zero_grad()
loss.backward()
optimizer.step()
t.set_postfix(loss='{:.6f}'.format(epoch_losses.avg))
t.update(len(inputs))
很显然这里的train_dataloader显然不是字典和列表,那么如何对这些进行迭代呢?
什么是可迭代对象?什么是迭代器?
- 如果一个对象拥有iter方法,其是可迭代对象;做个比喻,一本书可以一页一页翻,是可迭代对象;一块石头,是不可迭代对象。列表,字符串,元组,字典都是可迭代对象。iter方法:Python iter() 函数 | 菜鸟教程 (runoob.com)
如果一个对象拥有iter方法和next方法,其是迭代器;做个比喻,一个机枪弹夹有N发子弹,是一个列表,你可以随意取用弹夹里的子弹(元素),因为你可以全部看到 ;一个机枪弹夹+机枪是一个迭代器(弹夹在机枪里,看不到也取不出来),要取用某一颗子弹(元素),只有从第一颗开始,把前面的全部打出来才能取。iter方法就相当于把弹夹装机枪里的动作,封装动作;next方法就相当于机枪开枪的动作。参考:Python next() 函数 | 菜鸟教程 (runoob.com)
迭代器的特性
迭代器是一个可以记住遍历的位置的对象。
- 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。这也是它和列表最大的不同!
- 迭代器有两个基本的方法:iter() 和 next()。
- 字符串,列表或元组对象都可用于创建迭代器: