python之旅:迭代器

Posted 墨颜丶

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python之旅:迭代器相关的知识,希望对你有一定的参考价值。

1、什么是迭代器?

迭代器是一个重复的过程,并且每次重复都是机遇上一次的结果而来

要想了解迭代器到底是什么?必须先了解一个概念,即什么是可迭代的对象?

可迭代对象:在python中,但凡内置有__iter__方法的对象,都是可迭代对象

以下都是可迭代的对象: ( 你可以自己在对象后面 ._ 看下有没有__iter__ )

str=hello

list=[1,2,3]

tup={1,2,3}

dic={x:1}

s1={a,b,c}

f=open(a.txt,w,encoding=utf-8)

 

2、迭代器

迭代器:迭代取值工具,可迭代的对象执行__iter__方法得到的返回值就是迭代器对象

dic={x:1,y:2,z:3}
iter_dic=dic.__iter__()     #第一件事是获得一个可迭代器,即调用了__iter__()函数
print(iter_dic.__next__())  #第二件事是循环的过程,循环调用__next__()函数。
print(iter_dic.__next__())
print(iter_dic.__next__())
print(iter_dic.__next__()) #第四行会提示哦,也相当于报错,只有三个值,你取第四个值的时候会停止迭代
                #    print(iter_dic.__next__())
                  StopIteratio

4、可迭代的对象vs迭代器对象?

可迭代的对象:str,list,tuple,dict,set,file
  1、获取可迭代对象的方式:python内置的有str,list,tuple,dict,set,file都是可迭代对象

  2、特点:内置有__iter__方法的都叫可迭代的对象,执行该方法会拿到一个迭代器对象。
 迭代器对象:文件对象本身就是迭代器对象
  1、获取迭代器对象的方式:
        执行可迭代对象的__iter__方法,拿到的返回值就是迭代器对象
  2、特点:
        内置有__next__方法,执行该方法会拿到迭代器对象中的一个值
        内置有__iter__方法,执行该方法会拿到迭代器本身
str1=hello
list1=[1,2,3]
tup1=(1,2,3)
dic={x:1}
s1={a,b,c}
#文件本身就是迭代器对象
f=open(a.txt,w,encoding=utf-8)
f.__next__()

5、迭代器的优缺点分析

迭代器的优点:

       提供了一种可不依赖于索引的取值方式

       迭代器更加节省内存

迭代器的缺点:

       取值麻烦,只能一个一个取,只能往后取

       并且是一次性的,无法用len获取长度

1、提供了一种可不依赖于索引的取值方式
#
这是a.txt文件的内容 adadaaasdasd dasdas das l=open(a.txt,r,encoding=utf-8) iter=l.__iter__() while True: #死循环 try: #用这个参数来检测 print(iter.__next__(),end=‘‘) except StopIteration: #检测什么时候出现StopIteration break #监测到出现StopIteration 就break
l.close()
#结果如下
adadaaasdasd
dasdas
das
#没有报错

2、迭代器更加节省内存
item=range(0,100000000000000000000000000000000000000000000)  #如rang,python2中会依次打印1,2,3,4,5,6.。。。python3中优化了迭代器直接打印出来,所以更省内存

print(item)
#结果如下
range(0, 100000000000000000000000000000000000000000000)
#取值麻烦,只能一个一个取,只能往后取

x=[1,2,3]
iter_x=x.__iter__()
while True:
    try:
        print(iter_x.__next__())
    except StopIteration:
        break
print(第二次=================================》)
iter_x=x.__iter__()
while True:
    try:
        print(iter_x.__next__())
    except StopIteration:
        break
#结果如下
1
2
3
第二次=================================1
2
3

6、for循环原理分析:

#6.1、for 循环称之为迭代器循环,in后跟的必须是可迭代的对象
#6.2、for循环会执行in后对象的__iter__方法,拿到迭代器对象
#6.3、然后调用迭代器对象的__next__方法,拿到一个返回值赋值给line,执行一次循环体
#6.4、周而复始,直到取值完毕,for循环会检测到异常自动结束循环
l=open(a.txt,r,encoding=utf-8)
for line in l: #iter_l=l.__iter__()
    print(line,end=‘‘)

for item in {x:1,y:2}:
    print(item,end=‘‘)

#结果如下
adadaaasdasd
dasdas
das
xy

 

以上是关于python之旅:迭代器的主要内容,如果未能解决你的问题,请参考以下文章

Python学习之旅—Day07(生成器与迭代器)

Python之旅的第3²+1天(文件操作迭代器生成器)

Python之旅.第三章.函数3.30

Python学习之旅 —— 基础篇字符串格式化递归生成器&迭代器模块

设计模式——迭代器模式学习之旅

设计模式——迭代器模式学习之旅