Python写一个对象,让它自己能够迭代
仿写range()对象,对象是可迭代的:
1 #!usr/bin/env python3
2 # -*- coding=utf-8 -*-
3
4 class myRange():
5 #初始化,也叫构造函数
6 def __init__(self,n):
7 self.i = 0
8 self.n = n
9
10 #类中核心,返回了迭代器本身;
11 def __iter__(self):
12 return self
13
14 #迭代器开始
15 def __next__(self):
16 if self.i < self.n:
17 i = self.i
18 self.i += 1
19 return i
20 else:
21 raise StopIteration();
22 print(dir(myRange(10)));
23 a = myRange(10);
24 print(dir(a)); #输出:['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__next__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'i', 'n']
25
26 if __name__ == "__main__":
27 a = myRange(10)
28 print("a=========>", next(a)); #0
29 print("next a====>", next(a)); #1
30 print("next a====>", next(a)); #2
31 print("next a====>", next(a)); #3
32 print("next a====>", next(a)); #4
33 print("next a====>", next(a)); #5
34 print("next a====>", next(a)); #6
35 print("next a====>", next(a)); #7
36 print("next a====>", next(a)); #8
37 print("next a====>", next(a)); #9
38 print("next a====>", next(a)); #发起raise StopIteraion()
39
上面是用next()把迭代器的所有元素一个一个依次打印出来的,当然也可以用for循环循环出来. for i in x: print(i),然后再用next(a)就会发起raise StopIteration()。下面用列表尝试一下:
1 #!usr/bin/env python3
2 # -*- coding=utf-8 -*-
3
4 class myRange():
5 #初始化,也叫构造函数
6 def __init__(self,n):
7 self.i = 0
8 self.n = n
9
10 #类中核心,返回了迭代器本身;
11 def __iter__(self):
12 return self
13
14 #迭代器开始
15 def __next__(self):
16 if self.i < self.n:
17 i = self.i
18 self.i += 1
19 return i
20 else:
21 raise StopIteration();
22 print(dir(myRange(10)));
23 a = myRange(10);
24 print(dir(a)); #输出:['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__next__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'i', 'n']
25
26 if __name__ == "__main__":
27 b = myRange(10)
28 print(list(b)) #全部打印出来了,后续没有元素了
29 print("b===>next b", next(b)) #StopIteration.
把迭代器里的所有元素装到列表中后,再调用next()也会发起:raise StopIteraion.
Python写一个对象,让它自己能够迭代的更多相关文章
- 用Python写一个简单的Web框架
一.概述 二.从demo_app开始 三.WSGI中的application 四.区分URL 五.重构 1.正则匹配URL 2.DRY 3.抽象出框架 六.参考 一.概述 在Python中,WSGI( ...
- python 写的http后台弱口令爆破工具
今天来弄一个后台破解的Python小程序,哈哈,直接上代码吧,都有注释~~ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 ...
- python的高级特性:切片,迭代,列表生成式,生成器,迭代器
python的高级特性:切片,迭代,列表生成式,生成器,迭代器 #演示切片 k="abcdefghijklmnopqrstuvwxyz" #取前5个元素 k[0:5] k[:5] ...
- 快速掌握用python写并行程序
目录 一.大数据时代的现状 二.面对挑战的方法 2.1 并行计算 2.2 改用GPU处理计算密集型程序 3.3 分布式计算 三.用python写并行程序 3.1 进程与线程 3.2 全局解释器锁GIL ...
- 初学Python写二进制文件
初学Python写二进制文件 把一个图片的16进制数据保存到一个txt文本,从这个txt文本读出并保存为二进制文件jpg图片文件.说明:图片读出的0xff粘贴ff到文本中,读出时是字符串的”ff”. ...
- Python写各大聊天系统的屏蔽脏话功能原理
Python写各大聊天系统的屏蔽脏话功能原理 突然想到一个视频里面弹幕被和谐的一满屏的*号觉得很有趣,然后就想用python来试试写写看,结果还真玩出了点效果,思路是首先你得有一个脏话存放的仓库好到时 ...
- python写红包的原理流程包含random,lambda其中的使用和见简单介绍
Python写红包的原理流程 首先来说说要用到的知识点,第一个要说的是扩展包random,random模块一般用来生成一个随机数 今天要用到ramdom中unifrom的方法用于生成一个指定范围的随机 ...
- Python写地铁的到站的原理简易版
Python地铁的到站流程及原理(个人理解) 今天坐地铁看着站牌就莫名的想如果用Python写其工作原理 是不是很简单就小试牛刀了下大佬们勿喷纯属小弟个人理解 首先来看看地铁上显示的站牌如下: 就想这 ...
- 读书笔记汇总 --- 用Python写网络爬虫
本系列记录并分享:学习利用Python写网络爬虫的过程. 书目信息 Link 书名: 用Python写网络爬虫 作者: [澳]理查德 劳森(Richard Lawson) 原版名称: web scra ...
随机推荐
- CSP-SJX2019 解题报告
T1 日期 日高于 \(31\) 或等于 \(00\) 的要修改 \(1\) 次. 月高于 \(12\) 或等于 \(00\) 的要修改 \(1\) 次. 月等于 \(02\) 且日大于 \(28\) ...
- CF453C Little Pony and Summer Sun Celebration
如果一个点需要经过奇数次我们就称其为奇点,偶数次称其为偶点. 考虑不合法的情况,有任意两个奇点不连通(自己想想为什么). 那么需要处理的部分就是包含奇点的唯一一个连通块.先随意撸出一棵生成树,然后正常 ...
- sqli-labs-master less05 前 知识点学习
1. left()函数: left(a,b)从左侧截取a的前b位,正确则返回1,错误则返回0 例: select left(database(),1)='s' 结果返回1 先查询数据库 datab ...
- oracle ddl 与 dml
DDL create table 创建表 alter table 修改表 drop table 删除表 truncate table 删除表中所有行 create index 创建索引 drop in ...
- JZOJ 2020.10.6 提高B组反思
JZOJ 2020.10.6 提高B组反思 T1 NYG的动态数点 最简单的一题 很容易想到\(O(n)\)的做法 枚举最小的那个数,即\(a_k\) 然后向左和向右扩展 然后可以直接从右端点+1继续 ...
- 第9.5节 Python的readlines读取文件内容及其参数hint使用分析
一. 语法 readlines(hint=-1) readlines函数用于从文件或流中一次性读取多行数据,返回数据存入一个列表中. 参数hint释义: 这个参数在readlines的官方文档说明是用 ...
- 学习JUC源码(1)——AQS同步队列(源码分析结合图文理解)
前言 最近结合书籍<Java并发编程艺术>一直在看AQS的源码,发现AQS核心就是:利用内置的FIFO双向队列结构来实现线程排队获取int变量的同步状态,以此奠定了很多并发包中大部分实现基 ...
- jvm 模型
- 原创:DynamicDataDisplay波形显示自定义格式
原创:DynamicDataDisplay 原版本在日期显示的格式上与我们的习惯不一样,特做如下修改: 自定义日期格式修改: //MainWindow.cs中 var ds = new Enumera ...
- 题解-CF1418G Three Occurrences
题面 CF1418G Three Occurrences 给一个 \(n\) 个数的序列 \(a_i\),求每个出现过的数出现次数为 \(3\) 的子序列个数. 数据范围:\(1\le n\le 5\ ...