【2020Python修炼记20】Python语法入门—迭代器

【目录】

一、迭代器

1、什么是迭代器

2、为何要有迭代器

3、如何使用迭代器

一、迭代器

1、什么是迭代器

#迭代器即迭代的工具,那什么是迭代呢?
#迭代是一个重复的过程,每次重复即一次迭代,并且每次迭代的结果都是下一次迭代的初始值
#只是单纯地重复,因而不是迭代

while True: #只是单纯地重复,因而不是迭代
    print(‘===>‘) 

l=[1,2,3]
count=0
while count < len(l): #迭代
    print(l[count])
    count+=1

2、为何要有迭代器

#1、为何要有迭代器?
对于序列类型:字符串、列表、元组,我们可以使用索引的方式迭代取出其包含的元素。但对于字典、集合、文件等类型是没有索引的,若还想取出其内部包含的元素,则必须找出一种不依赖于索引的迭代方式,这就是迭代器

#2、什么是可迭代对象?
可迭代对象指的是内置有__iter__方法的对象,即obj.__iter__,如下
‘hello‘.__iter__
(1,2,3).__iter__
[1,2,3].__iter__
{‘a‘:1}.__iter__
{‘a‘,‘b‘}.__iter__
open(‘a.txt‘).__iter__

#3、什么是迭代器对象?
可迭代对象执行obj.__iter__()得到的结果就是迭代器对象
而迭代器对象指的是即内置有__iter__又内置有__next__方法的对象

文件类型是迭代器对象
open(‘a.txt‘).__iter__()
open(‘a.txt‘).__next__()

#4、注意:
迭代器对象一定是可迭代对象,而可迭代对象不一定是迭代器对象

老母鸡都是迭代器对象keys(), values(), items(), range(), f, 

3、如何使用迭代器

(1)迭代器对象的使用

dic={‘a‘:1,‘b‘:2,‘c‘:3}
iter_dic=dic.__iter__() #得到迭代器对象,迭代器对象即有__iter__又有__next__,但是:迭代器.__iter__()得到的仍然是迭代器本身
iter_dic.__iter__() is iter_dic #True

print(iter_dic.__next__()) #等同于next(iter_dic)
print(iter_dic.__next__()) #等同于next(iter_dic)
print(iter_dic.__next__()) #等同于next(iter_dic)
# print(iter_dic.__next__()) #抛出异常StopIteration,或者说结束标志

#有了迭代器,我们就可以不依赖索引迭代取值了
iter_dic=dic.__iter__()
while 1:
    try:
        k=next(iter_dic)
        print(dic[k])
    except StopIteration:
        break

#这么写太丑陋了,需要我们自己捕捉异常,控制next,python这么牛逼,能不能帮我解决呢?能,请看for循环

(2)for循环

#基于for循环,我们可以完全不再依赖索引去取值了
dic={‘a‘:1,‘b‘:2,‘c‘:3}
for k in dic:
    print(dic[k])

#for循环的工作原理
#1:执行in后对象的dic.__iter__()方法,得到一个迭代器对象iter_dic
#2: 执行next(iter_dic),将得到的值赋值给k,然后执行循环体代码
#3: 重复过程2,直到捕捉到异常StopIteration,结束循环

(4)迭代器的优缺点

#优点:

1 、为序列和非序列类型提供一种统一的、不依赖于索引的迭代方式

2、惰性计算,节省内存:迭代器对象表示的是一个数据流,可以只在需要时才去调用next来计算出一个值,

就迭代器本身来说,同一时刻在内存中只有一个值,因而可以存放无限大的数据流,

而对于其他容器类型,如列表,需要把所有的元素都存放于内存中,受内存大小的限制,可以存放的值的个数是有限的。

#缺点:

1、除非取尽,否则无法获取迭代器的长度(只有在next完毕才知道到底有几个值)

2、一次性的,只能往后走,不能往前退

只能取下一个值,不能回到开始,更像是‘一次性的’,迭代器产生后的唯一目标就是重复执行next方法直到值取尽,否则就会停留在某个位置,等待下一次调用next;

若是要再次迭代同个对象,你只能重新调用iter方法去创建一个新的迭代器对象,如果有两个或者多个循环使用同一个迭代器,必然只会有一个循环能取到值。

(5)自定义迭代器——生成器

【2020Python修炼记21】Python语法入门—生成器

原文地址:https://www.cnblogs.com/bigorangecc/p/12551156.html

时间: 2024-08-01 01:43:06

【2020Python修炼记20】Python语法入门—迭代器的相关文章

python语法入门之与用户交互,常用运算符

python语法入门之与用户交互,常用运算符 一.用户与程序的交互 1.1什么是用户交互 用户交互就是往计算机input/输入数据,计算机print/输出结果. 1.2为什么要与用户交互 交互时为了能够像人一样与用户沟通方便. 1.3 如何与用户交互 交互的本质就是输入输出. 3.1 输入input: 在python3中input无论输入的什么类型的内容,都会存为字符串类型. name = input('请输入用户名:')请输入用户名:123>>> print(type(name))&l

04-4 python语法入门之与用户交互、运算符

[TOC] 一 程序与用户交互 1.1.什么是与用户交互 用户交互就是人往计算机中input/输入数据,计算机print/输出结果 1.2.为什么要与用户交互? 插图:恶搞图12 为了让计算机能够像人一样与用户沟通交流 比如,过去我们去银行取钱,用户需要把帐号密码告诉柜员,而现在,柜员被ATM机取代,ATM机就是一台计算机,所以用户同样需要将帐号密码告诉计算机,于是我们的程序中必须有相应的机制来控制计算机接收用户输入的内容,并且输出结果 1.3.如何与用户交互 交互的本质就是输入.输出 1.3.

04-1 python语法入门之变量

目录 一 引入 二 变量 1.什么是变量? 2.为什么要有变量? 3.怎么使用变量 (先定义.后调用) 3.1 变量的定义与使用 3.2 变量名的命名规范 3.3 变量名的命名风格 3.4 变量值的三大特性 三 常量 1.什么是常量? 2.为什么要有常量? 3.怎么使用常量? 四 视频链接 https://www.bilibili.com/video/av73342471/?p=4 一 引入 我们学习python语言是为了控制计算机.让计算机能够像人一样去工作,所以在python这门语言中,所有

04-5 python语法入门之流程控制

[TOC] #一 引子: 流程控制即控制流程,具体指控制程序的执行流程,而程序的执行流程分为三种结构:顺序结构(之前我们写的代码都是顺序结构).分支结构(用到if判断).循环结构(用到while与for) 插图:恶搞图20 #二 分支结构 2.1 什么是分支结构 分支结构就是根据条件判断的真假去执行不同分支对应的子代码 2.2 为什么要用分支结构 人类某些时候需要根据条件来决定做什么事情,比如:如果今天下雨,就带伞 所以程序中必须有相应的机制来控制计算机具备人的这种判断能力 2.3 如何使用分支

04-3 python语法入门之垃圾回收机制

[TOC] 一 引入 ? 解释器在执行到定义变量的语法时,会申请内存空间来存放变量的值,而内存的容量是有限的,这就涉及到变量值所占用内存空间的回收问题,当一个变量值没有用了(简称垃圾)就应该将其占用的内存给回收掉,那什么样的变量值是没有用的呢? ? 由于变量名是访问到变量值的唯一方式,所以当一个变量值不再关联任何变量名时,我们就无法再访问到该变量值了,该变量值就是没有用的,就应该被当成一个垃圾回收.毫无疑问,内存空间的申请与回收是非常耗费精力的事情,而且存在很大的危险性,稍有不慎就有可能引发内存

Python语法入门02

引子 上一篇我们主要了解到了python这门编程语言,今天来说一下关于用户交互,数据类型和运算符方面的学习内容 用户交互 什么是用户交互? 用户交互就是人往计算机里输入数据(input),计算机输出结果(print) 很简单一个例子,我们在pycharm中输入以下代码 age = input("请输入年龄:") #往计算机中输入数据 print(type(age)) #让计算机输出age的数据类型 这时,计算机就会接收用户输入,其实无论输入什么类型的数据,最终返回的一定是字符串(str

python语法入门之流程控制

流程控制 一.流程控制 ? 流程控制就是控制流程,具体控制程序的执行流程,而程序的执行流程分为三种结构:顺序结构.分支结构(用if判断).循环结构(用到while与for) ? 主要目的就是让计算帮助人类工作,所以,编写的程序需要有判断力 ? 语法结构:python是通过缩进来决定代码的归属(4个空格表示一个缩进) 二.分支结构 if 主要用于判断事物的对错,真假,是否可行 if 条件 #如果结果为True,就依次执行:代码1,代码2 代码1 代码2 -- elif 条件2 #可以加N多个eli

Python语法入门之基本数据类型

目录 一.整型(int) 二.浮点型(float) 三.字符串类型(str) 字符串在python2和python3中的细微区别 四.复数 五.列表(list) 六.数据字典(dict) 定义方式 七.布尔值(bool) 定义 ==和is 一.整型(int) python2中有long类型 python3中没有long类型,只有int类型 整形,用来记录年龄,人数等整数相关的状态 age = 21 students = 65 print(type(age)) <class 'int'> # 类

【2020Python修炼记】面向对象编程——绑定方法与非绑定方法

[目录] 一.绑定方法与非绑定方法 二.非绑定方法 一.绑定方法与非绑定方法 ? 类中定义的函数分为两大类:绑定方法和非绑定方法 ? 其中绑定方法又分为绑定到对象的对象方法和绑定到类的类方法. ? 在类中正常定义的函数默认是绑定到对象的,而为某个函数加上装饰器@classmethod后,该函数就绑定到类了. 类方法通常用来在__init__的基础上提供额外的初始化实例的方式: # 配置文件settings.py的内容 HOST='127.0.0.1' PORT=3306 # 类方法的应用 imp