python - 在 Python 中遍历类的实例
问题描述
这是我正在使用的代码。
import csv
with open('sample.csv') as csvfile:
mpg = csv.DictReader(csvfile)
print(mpg)
输出:
<csv.DictReader object at 0x7f6661fa8780>
上面的代码给了我一个 DictReader 实例'mpg'。
现在,下面的代码是我感到困惑的地方。
with open('sample.csv') as csvfile:
mpg = csv.DictReader(csvfile)
for row in mpg:
print(row)
在这里,我将每一行都作为 OrderedDict。但是,我的问题是如何遍历 DictReader 的实例“mpg”,它最后是一个对象,而不是一个列表或类似的东西?
请帮助我了解这个概念。
解决方案
类可以通过定义一个
__iter__()
方法来定义它们是如何被迭代的;这应该不接受额外的参数并返回一个有效的迭代器对象。一个想要成为迭代器的类应该实现两个方法:一个next()
行为如上所述的__iter__()
方法,以及一个返回 self 的方法。
DictReader
实现__iter__()
和__next__()
。因此,它既是可迭代的,又可以用作迭代器。事实上,__iter__()
返回自身,这非常好,因为它可以用作迭代器,因为__next__()
. 在GitHub 上查看 cpython 的实现。请注意,在 python 3 中,__next__()
已重命名为next()
( PEP 3114 )。
推荐阅读
- ios - 更改导航栏背景颜色后,self.view 的 y 位置发生更改
- xaml - 如何向我的 xaml 2017 VS 程序添加图标
- java - 如何在mig布局中进行组件定位
- webpack - 仅使用标志运行 Webpack 插件
- c - 关于数据结构的建议
- printing - 打印 itext 7 pdf 文档(最好通过 system.drawing.printing)
- typescript - Typescript:使用联合类型和三元运算符进行类型推断
- kubernetes - Kubernetes DNS 使用 systemd resolvd 的理想设置
- html - 如何在视频背景上覆盖导航栏
- charts - chartjs默认背景颜色到列