1. 程式人生 > >python之旅:叠代器

python之旅:叠代器

返回 一次 直接 col 取值 while 自動 一次循環 方法

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