最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 零基础学python之迭代器

    正文概述    2020-07-23   240

    零基础学python之迭代器

    迭代器

    迭代器可以简单的理解为 for 循环, Python 除了 for 循环为我们准备了另一种访问集合元素的方式。

    特点:

    可以记住遍历的位置的对象。

    迭代器从集合的第一个元素开始访问,直到所有的元素访问结束。

    迭代器只能向前不能后退。

    但是判断一个对象是否有迭代器,除了看它能不能使用 for 循环外, Python 也为我们提供了更加专业的方法—— isinstance() 。

    我们可以使用 isinstance() 来判断当前的对象是否可以迭代。

    在使用迭代器之前,需要先将迭代器引入,因为迭代器不是 Python 的内置方法。

    from collections.abc import Iterable
    print(isinstance('geekdigging', Iterable))
    print(isinstance([], Iterable))
    print(isinstance([], Iterable))
    print(isinstance({x for x in range(5)}, Iterable))
    print(isinstance(123, Iterable))

    打印结果如下:

    True
    True
    True
    True
    False

    这里有一个小点注意一下,当我们在引入 Iterable 的时候,在之前的版本引入方式都是 from collections import Iterable ,但是在 Python3.7 的时候抛了一个异常出来,如下:

    D:/Development/Projects/python-learning/base-iter/Demo.py:1: DeprecationWarning: Using or importing the ABCs 
    from '
    collections' instead of from 'collections.abc' is deprecated, and in 3.8 it will stop working
    from collections import Iterable

    含义是这种引入方式将在 Python3.8 中停止使用,现在 Python3.8 已经发布了,我们就按照提示中的方式来引入,使用 from collections.abc import Iterable 。

    迭代器中,最重要的方法一定是 next() ,从名字上就能看出来,它的作用是下一个。

    我们现在来尝试迭代一个列表:

    list1 = [1, 2, 3, 4]
    next(list1)

    执行结果:

    Traceback (most recent call last):
      File "D:/Development/Projects/python-learning/base-iter/Demo.py", line 12, in <module>
        next(list1)
    TypeError: 'list' object is not an iterator

    不是说好的列表是可以迭代的么,为什么又报错了。

    这位同学,先消消气,看看报错信息说的是啥,这是在提示我们列表并不是一个迭代器。

    所以,可迭代对象不一定是迭代器!

    我们导入 Iterator 模块,先将列表转换成迭代器,再试试看。

    list1 = iter(list1)
    print(type(list1))

    执行结果:

    <class 'list_iterator'>

    从类型上来看,现在已经是一个可以迭代的列表了,我们再试试 next() 方法。

    print(next(list1))
    print(next(list1))
    print(next(list1))
    print(next(list1))

    执行结果:

    1
    2
    3
    4

    你看,现在就能正常打印了吧。

    刚才我们将整个列表中的元素迭代完了,如果这时候再迭代一次会怎么样呢?

    print(next(list1))

    执行结果:

    Traceback (most recent call last):
      File "D:/Development/Projects/python-learning/base-iter/Demo.py", line 23, in <module>
        print(next(list1))
    StopIteration

    看到了咯,会抛出 StopIteration 的异常。

    可能看到这里,大家还是感觉迭代器没什么用,下面我再来举个例子,如果我们现在有一个 set 集合,我想要获取一个一个 set 集合中的元素,这时迭代器就派上用场了,因为在 set 集合中,是没有索引的,如果想要取到某个值,就只能使用 for 循环整个集合,但是有了迭代器以后,我们就无需循环整个集合了。

    set1 = {1, 2, 3, 4, 5}
    set1 = iter(set1)
    print(next(set1))
    print(next(set1))
    print(next(set1))
    print(next(set1))
    print(next(set1))

    结果我就不放出来了,大家应该都知道结果了。

    除此之外,迭代器有一个非常巨大的优势是在迭代之前,无需准备好所有的元素,迭代器仅在迭代到某个元素的时候才开始计算这个元素,在这之前或者之后,元素是可以不存在或者被销毁的。

    这个特性使得它在遍历一些体积巨大的集合的时候,具有非常大的优势。


    起源地下载网 » 零基础学python之迭代器

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元