Python:迭代器的简单理解
一、什么是迭代器
迭代,顾名思义就是重复做一些事很多次(就现在循环中做的那样)。迭代器是实现了__next__()方法的对象(这个方法在调用时不需要任何参数),它是访问可迭代序列的一种方式,通常其从序列的第一个元素开始访问,直到所有的元素都被访问才结束。 [注意]:迭代器只能前进不能后退
[迭代器的优点]:
使用迭代器不要求事先准备好整个迭代过程中的所有元素。迭代器仅仅在迭代到某个元素时才计算该元素,而在这之前或之后元素可以不存在或者被销毁。因此迭代器适合遍历一些数量巨大甚至无限的序列。
二、创建迭代器
A、使用内建的工厂函数iter(iterable)可以将可迭代序列转换为迭代器
a=[1,2,3,4]
b=(1,2,3)
str='Tomwenxing'
print(iter(a))
print(iter(b))
print(iter(str))

B、自定义迭代器
•Python中迭代器的本质上每次调用__next__()方法都返回下一个元素或抛出StopIteration的容器对象
•由于Python中没有“迭代器”这个类,因此具有以下两个特性的类都可以称为“迭代器”类:
1、有__next__()方法,返回容器的下一个元素或抛出StopIteration异常
2、有__iter__()方法,返回迭代器本身
#斐波那契数列
class Fabs():
def __init__(self,max):
self.max=max
self.n,self.a,self.b=0,0,1 def __iter__(self):#定义__iter__方法
return self def __next__(self):#定义__next__方法
if self.n<self.max:
tmp=self.b
self.a,self.b=self.b,self.a+self.b
#等价于:
#t=(self.a,self.a+self.b)
#self.a=t[0]
#self.b=t[1]
self.n+=1
return tmp
raise StopIteration print(Fabs(5))
for item in Fabs(10):
print(item,end=' ')

三、迭代器的方法
1.iter.__next__():返回迭代器的下一个元素,但没有下一个元素时抛出StopIteration异常
list=[1,2,3,4]
list=iter(list)
print(list.__next__())
print(list.__next__())
print(list.__next__())
print(list.__next__())
print(list.__next__())


2.iter.__iter__():返回迭代器对象本身
list=[1,2,3,4]
list=iter(list)
print(list.__iter__())

Python:迭代器的简单理解的更多相关文章
- python中HTMLParser简单理解
找一个网页,例如https://www.python.org/events/python-events/,用浏览器查看源码并复制,然后尝试解析一下HTML,输出Python官网发布的会议时间.名称和地 ...
- STL-set 容器以及迭代器的简单理解
先说下set的基本操作和时间复杂度 begin() ,返回set容器的第一个元素 end() ,返回set容器的最后一个元素 clear() ,删除set容器中的所有的元素 em ...
- 怎么理解Python迭代器与生成器?
怎么理解Python迭代器与生成器?在Python中,使用for ... in ... 可以对list.tuple.set和dict数据类型进行迭代,可以把所有数据都过滤出来.如下: ...
- python多重继承的属性和方法调用顺序问题和对迭代器的初步理解
推荐阅读:https://www.cnblogs.com/bigb/p/11650707.html 计算机学习的一个好办法就是自己将代码跑一遍,了解代码的运作顺序和原理(主要弄懂 函数作用,传入参数, ...
- Python迭代器,生成器--精华中的精华
1. 迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退,不过这也没什么,因为人们很少在迭代途中往后退.另外,迭代器的一大 ...
- 3、Python迭代器、列表解析及生成器(0530)
1.动态语言 sys.getrefcount() //查看对象的引用计数 增加对象的引用计数场景 对象创建时:以赋值的方式,创建变量名的同时就会创建变量 将对象添加进容器时:类似list.app ...
- 一文搞懂Python迭代器和生成器
很多童鞋搞不懂python迭代器和生成器到底是什么?它们之间又有什么样的关系? 这篇文章就是要用最简单的方式让你理解Python迭代器和生成器! 1.迭代器和迭代过程 维基百科解释道: 在Python ...
- Python - 迭代器与生成器 - 第十三天
Python 迭代器与生成器 迭代器 迭代是Python最强大的功能之一,是访问集合元素的一种方式. 迭代器是一个可以记住遍历的位置的对象. 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问 ...
- python迭代器,生成器
1. 迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退,不过这也没什么,因为人们很少在迭代途中往后退.另外,迭代器的一大 ...
随机推荐
- java日常规范
1.方法返回类型用int还是Integer 看需求,int是数据类型,不能包含null等. Integer是类,其中包含该类中属性和方法,包含null. 所以建议使用Integer,方便以后拓展. 2 ...
- 将http转为https访问
1.去阿里云购买证书 有免费一年的证书 最多20个 一个证书需要填写一个二级域名 www.xxx.com2.开启apache相应配置 #修改httpd.conf文件 LoadModule ssl_mo ...
- laravel artisan 命令列表
5.4版本新增 命令 说明 备注 php artisan make:resource ? 创建api返回格式化资源 >=5.4版本可用 php artisan make:rule ? 创建val ...
- 文件句柄W模式
f1=open('lo',encoding='utf-8',mode='w')f1.write('w4567')print(f1.tell())f1.close() #tell 告诉指针的位置(按字节 ...
- 基于Doxygen_C语言代码文档一键生成的记录与规范(嵌入式适用)
下位机代码格式规范整合记录 注册 doxygen 账号获取doxygen 的 *.exe 执行文件 https://pan.baidu.com/s/1MF5v-Ts80BysmZtXSqONmg 提取 ...
- LIFO栈 ADT接口 实现十进制转其他进制
LIFO 接口 Stack.h //LIFO 链栈初始化 void InitStack(Stack top){ //LIFO 链栈判断栈空 boolean StackKEmpty(Stack top) ...
- 修改并编译golang源码
最近为了做Hyperledger Fabric国密改造,涉及到了golang源码的改动.特将操作过程整理如下,以供参考: golang的源码安装其实比较简单,只需运行源码包中的脚本src/all.ba ...
- 收藏Linux命令
http://www.cnblogs.com/laov/p/3541414.html#zhiling 1.压缩文件夹 http://www.cnblogs.com/eoiioe/archive/200 ...
- 【转】 GATK--原始数据预处理
1. 对原始下机fastq文件进行过滤和比对(mapping) 对于Illumina下机数据推荐使用bwa进行mapping. Bwa比对步骤大致如下: (1)对参考基因组构建索引: 例子:bwa i ...
- stardict词库
http://download.huzheng.org/zh_CN/ sudo tar -jxvf * -C /usr/share/stardict/dic