python中的迭代器Iterator

迭代器是来帮助我们记录每次迭代访问到的位置,当我们对迭代器使next()函数的时候,迭代器会向我们返回它所记录位置的下⼀个位置的数据。实际上,在使⽤next()函数的时候,调⽤的就是迭代器象的    __next__   ⽅法(Python3中是对象的    __next__   ⽅法, Python2中是对象的next()⽅法)。所以,我们要想构造个迭代器,就要实现它的    __next__    ⽅法。但这还不够,python要求迭代器本身也是可迭代的,所以我们还要为迭代器实现    __iter__   ⽅法,⽽    __iter__   ⽅法要返回⼀个迭代器,迭代器⾃身正是⼀个迭代器,所以迭代器的    __iter__   ⽅法返回⾃身即可。

个实现了    __iter__   ⽅法和    __next__   ⽅法的象,就是迭代器

class    MyList(object):

            """⾃定义的⼀个可迭代对象"""                

          def    __init__(self):                                 

                    self.items    =    []

def    add(self,    val):

self.items.append(val)

def    __iter__(self):                                

                    myiterator    =    MyIterator(self)                               

                    return    myiterator

class    MyIterator(object):

             """⾃定的供上⾯可迭代象使⽤的⼀个迭代器"""                

           def    __init__(self,    mylist):                                

                    self.mylist    =    mylist

#    current⽤来记录当前访问到的位置                                 

self.current    =    0

def    __next__(self):

if    self.current    <    len(self.mylist.items):                                               

            item    =    self.mylist.items[self.current]                                                                                         

            self.current    +=    1                                                

              return    item                                

else:                                               

             raise    StopIteration

def    __iter__(self):                               

          return    self

if    __name__    ==    '__main__':

mylist    =    MyList()               

          mylist.add(1)                

          mylist.add(2)                

          mylist.add(3)               

          mylist.add(4)               

          mylist.add(5)               

 for    num    in    mylist

           print(num)


如何判断个对象是否是迭代器

可以使    isinstance()    判断⼀个象是否是    Iterator   对象:

In    [56]:    from    collections    import    Iterator

In   [57]:   isinstance([],    Iterator)

Out[57]:    False

In    [58]:    isinstance(iter([]),    Iterator)

Out[58]:    True

In    [59]:    isinstance(iter("abc"),   Iterator) Out[59]:   True


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/474304.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

建立一颗二叉排序树,并删除该二叉排序树上的某个节点

设计并验证如下算法&#xff1a;而擦函数采用二叉链表结构表示&#xff0c;按输入的关键字序列建立一颗二叉排序树&#xff0c;并删除该二叉排序树上的某个节点。 #include<stdio.h> #include<stdlib.h> #include<string.h> typedef int TElemType; int m,n…

LeetCode 1153. 字符串转化(哈希)

文章目录1. 题目2. 解题1. 题目 给出两个长度相同的字符串&#xff0c;分别是 str1 和 str2。请你帮忙判断字符串 str1 能不能在 零次 或 多次 转化后变成字符串 str2。 每一次转化时&#xff0c;将会一次性将 str1 中出现的 所有 相同字母变成其他 任何 小写英文字母&#x…

使用数据库恢复专家,修复数据库

参考文章: http://www.cnblogs.com/arcer/admin/EditPosts.aspx?postid3118718&update1转载于:https://www.cnblogs.com/arcer/archive/2013/06/05/3118823.html

for循环利用可迭代对象与迭代器完成工作的本质

for循环工作本质 for item in Iterable 循环的本质就是先通过iter()函数获取可迭代对象Iterable 的迭代器&#xff0c;然后对获取到的迭代器不断调⽤next()⽅法来获取下⼀个值并将其 赋值给item&#xff0c;当遇到StopIteration的异常后循环结束。 li [100, 200, 300] #…

哈希表的构造和查找算法

实现哈希表的构造和查找算法&#xff0c;要求&#xff1a;用除留余数法构造哈希函数&#xff0c;分别用一次探测再散列、二次探测再散列解决冲突。 #include<stdio.h> #include<stdlib.h> #include<math.h> /*typedef struct {ElemType *elem;int count;int …

LeetCode 727. 最小窗口子序列(滑动窗口)

文章目录1. 题目2. 解题1. 题目 给定字符串 S and T&#xff0c;找出 S 中最短的&#xff08;连续&#xff09;子串 W &#xff0c;使得 T 是 W 的 子序列 。 如果 S 中没有窗口可以包含 T 中的所有字符&#xff0c;返回空字符串 “”。 如果有不止一个最短长度的窗口&#x…

利用python自定义完整版迭代器

classMyList(object): """自定义的可迭代对象,迭代器 容器""" def __init__(self): self.container [] self.i 0 def add(self, item): """向对象中添加数据""" self.container.append(item) def __next__(self…

GHOSTXP_SP3电脑公司快速安装机版V2013

GHOSTXP_SP3电脑公司快速安装机版V2013下载地址&#xff1a;http://www.xiazaijidi.com/xp/dngs/1.html文件名称:GHOSTXP_SP3电脑公司特别版_V2012_05.iso文件大小:683.74MD5: 6182CC641025BA15AC43689E04ED5961SHA1: D5675FF901CBDCC27FDB9B5DD937DE145FEE8B33CRC32: C5B13EF2…

LeetCode 1035. 不相交的线(最长公共子序列DP)

文章目录1. 题目2. 解题1. 题目 我们在两条独立的水平线上按给定的顺序写下 A 和 B 中的整数。 现在&#xff0c;我们可以绘制一些连接两个数字 A[i] 和 B[j] 的直线&#xff0c;只要 A[i] B[j]&#xff0c;且我们绘制的直线不与任何其他连线&#xff08;非水平线&#xff0…

python中迭代器的应用场景

1.迭代器的应用场景 1). 如果数列的数据规模巨大 2). 数列有规律&#xff0c;但是依靠列表推导式描述不出来 2.数学中有个著名的斐波拉契数列&#xff08;Fibonacci&#xff09;&#xff0c;数列中第⼀个数0&#xff0c;第⼆个数1&#xff0c;其后的每⼀个数都可由前两个数相…

word粘贴至html特殊字符 粘贴后可能为乱码

可查找挑取其中有用的 常用字符  特殊字符大全&#xff08;完整版&#xff09; &#xfffd;6&#xfffd;2 &#xfffd;6&#xfffd;5 &#xfffd;6&#xfffd;4 &#xff1d; &#xfffd;6&#xfffd;6 &#xfffd;6&#xfffd;7 &#xff1c; &#xff1e; …

LeetCode MySQL 1549. The Most Recent Orders for Each Product

文章目录1. 题目2. 解题1. 题目 Table: Customers ------------------------ | Column Name | Type | ------------------------ | customer_id | int | | name | varchar | ------------------------ customer_id is the primary key for this table. T…

Select 可编辑 - 完美支持各大主流浏览器

最近做项目有个select可编辑的需求,一时棘手,网上找了很多解决方案都不完美,没办法自己写了一个,经测试IE,FF,chrome都支持。特此拿出来共享一下。 实现原理还是用select和input伪装成的,只不过是在样式处理上做了一些改进。 <!DOCTYPE html PUBLIC "-//W3C//Dth XHTML…

软件外包平台用例图

简要概括软件外包平台主要的用例以及其用例描述、类图、时序图、 用例图如下&#xff1a; 用例描述如下&#xff1a; “注册”用例描述 标题 说明 用例名称 注册 用例标识号 1 简要说明 使用此平台先进行注册成为用户 前置条件 无 基本事件流 1.判断用户注册的信息…

LeetCode 473. 火柴拼正方形(回溯)

文章目录1. 题目2. 解题1. 题目 还记得童话《卖火柴的小女孩》吗&#xff1f;现在&#xff0c;你知道小女孩有多少根火柴&#xff0c;请找出一种能使用所有火柴拼成一个正方形的方法。 不能折断火柴&#xff0c;可以把火柴连接起来&#xff0c;并且每根火柴都要用到。 输入为…

web基础编程-图片管理网站

图片艺廊管理网站说明 数据库设计&#xff1a; 主要由三张表&#xff1a;用户表、图片表、用户图片对应关系表。 用户表&#xff1a; 主要字段如下&#xff1a; 用户ID 整型 主键 自增长&#xff1b; 用户姓名 字符型 &#xff1b; 用户密码 字符型 &…

HDOJ 1494 跑跑卡丁车

跑跑卡丁车Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1778 Accepted Submission(s): 583Problem Description跑跑卡丁车是时下一款流行的网络休闲游戏&#xff0c;你可以在这虚拟的世界里体验驾驶的乐趣。…

LeetCode 375. 猜数字大小 II(DP)

文章目录1. 题目2. 解题1. 题目 我们正在玩一个猜数游戏&#xff0c;游戏规则如下&#xff1a; 我从 1 到 n 之间选择一个数字&#xff0c;你来猜我选了哪个数字。 每次你猜错了&#xff0c;我都会告诉你&#xff0c;我选的数字比你的大了或者小了。 然而&#xff0c;当你猜…

网络命令使用

实验目的 1&#xff0e;掌握基本的网络命令&#xff0c;并了解其在网络领域的作用。 2&#xff0e;学习使用网络命令&#xff0c;并了解其参数的含义。 实验要求 1&#xff0e;要求不仅能会使用网络命令&#xff0c;并能在实际网络操作中灵活运用。 2&#xff0e;能将基本…

python中的range与list函数

使用python的人都知道range()函数很方便&#xff0c;今天再用到他的时候发现了很多以前看到过但是忘记的细节。 这里记录一下range(),复习下list的slide&#xff0c;最后分析一个好玩儿的冒泡程序。 这里记录一下&#xff1a; >>> range(1,5) #代表从1到5(不包含5)[1,…