码迷,mamicode.com
首页 > 编程语言 > 详细

python之旅:迭代器

时间:2018-03-30 21:39:29      阅读:204      评论:0      收藏:0      [点我收藏+]

标签:一件事   list   可迭代对象   lin   end   赋值   获得   停止   ict   

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之旅:迭代器

标签:一件事   list   可迭代对象   lin   end   赋值   获得   停止   ict   

原文地址:https://www.cnblogs.com/moyand/p/8678373.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!