首页 > 解决方案 > 在 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”,它最后是一个对象,而不是一个列表或类似的东西?

请帮助我了解这个概念。

标签: pythonpython-3.xcsv

解决方案


类可以通过定义一个__iter__()方法来定义它们是如何被迭代的;这应该不接受额外的参数并返回一个有效的迭代器对象。一个想要成为迭代器的类应该实现两个方法:一个next()行为如上所述的__iter__()方法,以及一个返回 self 的方法。

PEP 234 -- 迭代器

DictReader实现__iter__()__next__()。因此,它既是可迭代的,又可以用作迭代器。事实上,__iter__()返回自身,这非常好,因为它可以用作迭代器,因为__next__(). 在GitHub 上查看 cpython 的实现。请注意,在 python 3 中,__next__()已重命名为next()( PEP 3114 )。


推荐阅读