IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> python中的迭代器 -> 正文阅读

[Python知识库]python中的迭代器

????????作为一个被学校老师水到不得了(外加上课好好自学被扣表现分等一系列令人。。。的事)的新手小白,总是被迫自己通过查资料和整理来巩固知识。

????????哎,命苦啊,希望大家都能碰上好老师吧。

????????这是第一篇发表的博客吧,大多也来自于自己日常的了解与整理,希望对于更多想要了解Python中迭代器的同学有所帮助,如果觉得不戳,也希望得到大家的肯定与支持。当然,犯错了也希望得到大家的纠正,共同进步嘛。(老师不好就靠网上的大佬!)

? ? ? ?

????????首先,什么是迭代器?

? ? ? ? 是访问集合元素的一种方式。

????????是一个可以记住遍历的位置的对象。

????????迭代器对象从集合的首个元素开始一一访问,直到所有的元素被访问完结束。像极了象棋中的‘兵’,只能往前不会后退。

? ? ? ? 当然,不只是集合啦,列表,字符串,元组还有字典对象都可用于创建迭代器。

如下图:

?

?

d = {
  'w' : '表',
  'h' : '演',
  '队' :'才',
  '长' :'艺'
}
lt = iter(d)

print (next(lt))
print (next(lt))
print (next(lt))
print (next(lt))

?(上图用字典对象来创建迭代器输出结果竟然只有键!且不是乱序!)

d = {
  'w' : '表',
  'h' : '演',
  '队' :'才',
  '长' :'艺'
}
for i in d.values():
    lt = iter(i)
    print (next(lt))

(上图用value和循环来弄可以弄出值来,但是感觉有点小麻烦)

至于能不能弄出键-值对,怎么弄出来,我只能说:I’m so vegetable!(手动一个滑稽)

过会再想想吧,弄出来会补充的,当然欢迎大佬教学,评论区见!

当然,‘lt’是可以用循环遍历的。(上面那个字典的值那里也用了,但是感觉效果不太好。)

? ? ? ? ?不过如果是字典的话应该是无序的吧,原因这里就不详述了(懒了,哈哈哈)

好了,如果你也是个新手小白,看完上面几张图一定会感到疑惑,iter()和next()是什么?怎么用?

? ? ? ? 这么说吧,要把对象/类创建为迭代器,必须为对象实现?__iter__() 。

? ? ? ? 如果你学过面向对象你就会知道,所有类都需要一个__init__()?的函数,它使您在创建对象时进行一些初始化。

????????__iter__()?方法的作用与__init__()相似,您可以执行操作(初始化等),但必须始终返回迭代器对象本身。

????????__next__()?方法也允许您执行操作,并且必须返回序列中的下一个项目,差不多就是用来遍历的,可以理解为手动的for循环吧,一个一个地输出。? ? ? ??

? ? ? ? 来来来,划重点,__iter__() 方法返回一个特殊的迭代器对象, 这个迭代器对象实现了 __next__() 方法。

? ? ? ? 简单说,先def __iter__(),再def__next__()。

下图是网上比较经典的例子(意思就是这代码基本上是我ctrl+c和ctrl+v的,当然要修改一点点的啦):

class MyNumbers:
    def __iter__(self):
        self.a = 1
        return self

    def __next__(self):
        x = self.a
        self.a += 1
        return x

myclass = MyNumbers()
myiter = iter(myclass)

print(next(myiter))
print(next(myiter))
print(next(myiter))

? 输出结果(自己换行哈,这里为了好看就不严谨一波了):1,2,3

? ? ? ? 有一个问题哈:

????????如果我们的__next__()方法过多或者我们再for循环中使用,可能造成无限循环的情况出现,怎么办呢?

????????在?__next__()?方法中,如果迭代完成了一定的次数,我们可以主动抛出一个异常来引发错误,从而终止循环。而这个异常,叫做StopIteration

? ? ? ? 而主动抛出异常,需要使用raise

? ? ? ? 简言之,作用与break相似。

下图又是一个经典样例(是的,我懒病又犯了,所以又从网上“整理”了一份代码,哈哈哈):

class MyNumbers:
  def __iter__(self):
    self.a = 1
    return self
 
  def __next__(self):
    if self.a <= 13:
      x = self.a
      self.a += 1
      return x
    else:
      raise StopIteration
 
myclass = MyNumbers()
myiter = iter(myclass)
 
for x in myiter:
  print(x)

当通过迭代器输出的数超过13,就会因为触发StopIteration异常而停止继续运行。

最后进行一下对于python中迭代器的总结吧。

可以被next()调用,不断返回下一个值的对象称为迭代器

使用迭代器不要求事先准备好整个迭代过程中的所有元素。迭代器仅仅在迭代到某个元素时才计算该元素,而在这之前或之后元素可以不存在或者被销毁。因此迭代器适合遍历一些数量巨大甚至无限的序列。使用迭代器不仅节省内存空间,也可以显著提升代码运行速度

迭代器通过方法__iter__()进行创建,可以用for循环与方法__next__()进行遍历

本文构成:网上到处借鉴+自我整理与理解,相当于自己的一份公开笔记吧

小白发文,多有缺陷,望指点与建议,会一直努力上进的。

若对你有帮助,十分高兴,也希望得到你的支持(懂的都懂,对吧?)。

生成器之后也肯定会写的,找时间吧。

??????Python3 迭代器与生成器 | 菜鸟教程 (runoob.com)

挺好的网站,挺适合像我这样的新手用来自学的,本文中部分资料来自于此。

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-11-27 09:51:35  更:2021-11-27 09:51:44 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 2:15:58-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码