美文网首页慕课网实战学习笔记编程语言爱好者程序员
如何实现可迭代对象和迭代器对象(一)

如何实现可迭代对象和迭代器对象(一)

作者: SmallRookie | 来源:发表于2017-07-24 20:08 被阅读19次
实际案例

某软件要求,从网站抓取各个城市气温信息,并依次显示:

北京:15~20
  天津:17~22
  长春:12~18
  ......

如果一次抓取所有城市天气再显示,显示第一个城市气温时,有很高的延时,并且浪费存储空间。我们期望以“用时访问”的策略,并且能把所有城市气温封装到一个对象里,可用for语句进行迭代。那么具体如何解决?

我们要实现可迭代对象和迭代对象,就先要了解什么是可迭代对象和迭代对象。为了说明这两个概念,我们先看如下代码:

l = [1, 2, 3, 4]
s = 'abcd'

for x in s:
    print x

for i in l:
    print i

相信大家都能看懂上述代码并能够知道该代码的输出结果。那么我们现在来分析一下代码:代码中两个for分别循环遍历列表、字符串,其实这里的两个for循环实质上是在对列表、字符串进行迭代。因此,列表和字符串这种可以迭代的对象称为可迭代对象。

此处以列表l为例,其迭代(循环遍历)的原理为:

  1. 列表l实现__iter__(),返回一个迭代器,所谓的迭代器就是具有next方法的对象,即迭代器对象;
  2. 迭代器对象在调用next方法时,迭代器对象会返回它的下一值。如果next方法被调用,但迭代器对象没有值返回,就会引发一个StopIteration异常。

注:Python 3.X版本中,next方法变化为__next__()

代码演示如下:

l = [1, 2, 3, 4]

# iter(l)
i = l.__iter__()

print i.next()
print i.next()
print i.next()
print i.next()
print i.next()

其输出结果如下:

1
2
3
4

Traceback (most recent call last):
  File "D:/Codes/imooc/Python/012.py", line 12, in <module>
    print i.next()
StopIteration

相关文章

网友评论

    本文标题:如何实现可迭代对象和迭代器对象(一)

    本文链接:https://www.haomeiwen.com/subject/jszbkxtx.html