本节书摘来自异步社区《Python数据科学指南》一书中的第1章,第1.10节,作者[印度] Gopi Subramanian ,方延风 刘丹 译,更多章节内容可以访问云栖社区“异步社区”公众号查看。
1.10 使用可迭代对象
可迭代对象和生成器十分相似,但是有一个重要的区别:我们可以重复地访问一个可迭代对象,即使我们已经访问完了序列中的所有元素,我们还可以从头重新访问它,这和生成器是完全不同的。
如果不保持任何状态,它们就是基于对象的生成器。所有带有iter方法的类,在用来产生数据时,都可以被作为无状态对象生成器来使用。
1.10.1 准备工作
我们通过一个简单的示例来理解可迭代对象。如果理解了之前介绍的生成器和迭代器,你也能很容易地理解这个概念。
1.10.2 操作方法
我们来创建一个简单的可迭代对象SimpleIterable,用代码来演示如何使用可迭代对象。
# 1.先创建一个简单的带有iter方法的类
class SimpleIterable(object):
def __init__(self, start, end):
self.start = start
self.end = end
def __iter__(self):
for x in range(self.start,self.end):
yield x**2
# 2.现在调用这个类,并且迭代它的值两次
c = SimpleIterable(1,10)
# 3.第一次迭代
tot = 0
for val in iter(c):
tot+=val
print tot
# 4.第二次迭代
tot =0
for val in iter(c):
tot+=val
print tot
1.10.3 工作原理
在第1步中,我们创建了一个简单的类作为我们的可迭代对象。Init构造函数有两个参数,起始和结束,这和我们之前的示例很相似。我们定义了一个iter函数,它将提供我们需要的序列,给定一个数值范围,返回这些数的平方值。
接下来,我们采用两个循环,在第1个循环中,我们迭代访问范围内的数值,从1到10。当我们进入第2个for循环时,我们会发现程序又迭代访问了那些序列,并且没有出现任何异常情况。
1.10.4 参考资料
第1章“Python在数据科学中的应用”中1.8节“使用迭代器”的相关内容。
第1章“Python在数据科学中的应用”中1.9节“生成一个迭代器和生成器”的相关内容。