国产成人AV无码一二三区,少女1到100集,国产精品久久久久精品综合紧,巜公妇之诱感肉欲HD在线播放

文章 > Python基础教程 > 零基础学python之迭代器

零基础学python之迭代器

头像

silencement

2019-12-05 16:40:333198浏览 · 0收藏 · 0评论

迭代器

迭代器可以简单的理解为 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))

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

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

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

关注

关注公众号,随时随地在线学习

本教程部分素材来源于网络,版权问题联系站长!

欧美一区二区| 李丽珍三级| 呱呱爆料网每日爆料| DO时不堪入耳的话的| 《菊内留香》双男主| 母亲和女婿免费高清电视剧| 情满四合院免费观看全集电视剧| 白色变态蕾丝超薄开档连身袜| 惠灵顿牛排| 人妻互换共享4P闺蜜疯狂互换 | 强伦轩一区二区三区的含义和影响 | 妈妈叫我戴上避孕套是什么歌| 狗锁住女人狗的视频大全图片 | 《俄罗斯空姐2(俄罗斯航空)》| 婆岳同床双飞呻吟艳妇无边| 破浪男女在线观看电影完整版| 狗配女人宝典视频| 麻豆传媒在线观看| 爸爸的擎天柱让我看第二集| 开处出血视频| 佐藤| 主动把奶头放进男朋友嘴巴里| 免费双男主做酱酱酿酿的动漫| 王叔我老公还在客厅呢什么小说 | BOBO浏览器| 《性88分钟》| 黄瓜视频| 被两个男人吃奶三P| 免费观看已满十八岁电视剧高清版| 双男主刺激战场视频真人版在线观..| 有没有免费看片的软件| 老阿姨高清在线观看电视剧法游戏| 国产真实乱人偷精品视频免费 | 《老板娘2》完整版| 情趣内衣| 妈妈叫我戴上避孕套英文| 俄罗斯少女2免费观看| 免费观看已满十八岁电视剧在线播...| 《金莲浮史》台湾绝版| 小姨子边喂奶边和我做爰| 无人区免费高清版观看