創(chuàng)新互聯(lián)www.cdcxhl.cn八線動(dòng)態(tài)BGP香港云服務(wù)器提供商,新人活動(dòng)買多久送多久,劃算不套路!
喀喇沁網(wǎng)站建設(shè)公司成都創(chuàng)新互聯(lián)公司,喀喇沁網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為喀喇沁成百上千提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)公司要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的喀喇沁做網(wǎng)站的公司定做!這篇文章主要介紹python中的迭代是什么,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
迭代:是通過重復(fù)執(zhí)行的代碼處理相似的數(shù)據(jù)集的過程,并且本次迭代的處理數(shù)據(jù)要依賴上一次的結(jié)果繼續(xù)往下做,上一次產(chǎn)生的結(jié)果為下一次產(chǎn)生結(jié)果的初始狀態(tài),如果中途有任何停頓,都不能算是迭代。例如:
(1)非迭代例子
loop = 0 while loop < 3: print("Hello world!") loop += 1
(2)迭代例子
loop = 0 while loop < 3: print(loop) loop += 1
例1僅是循環(huán)3次輸出" Hello world!",輸出的數(shù)據(jù)不依賴上一次的數(shù)據(jù),因此不是跌代。
在python中通常用for …in遍歷元組、列表、字典。而for … in后面需要那個(gè)可迭代對(duì)象。那么在python中什么是可迭代對(duì)象呢?
在python中
(1)可迭代對(duì)象(iterable),是指擁有了__iter__的內(nèi)置方法的對(duì)象。
(2)迭代器(iterator) ,是指擁__iter__與__next__方法的對(duì)象。
在這里__iner__需要返回一個(gè)迭代器對(duì)象,__next__方法可以取出值,并停留到取值的位置,以便可取出下一個(gè)值。
在這里可以看出一個(gè)迭代器一定是一個(gè)可迭代對(duì)象,而一個(gè)可迭代對(duì)象不一定是迭代器。
在python中可以用isinstance(object,Iterable)判斷對(duì)象是否為可迭代對(duì)象。用isinstance(object,Iterator)判斷對(duì)象是否為迭代器。
In [1]: from collections import Iterable In [2]: from collections import Iterator In [3]: isinstance(1,Iterable) Out[3]: False In [4]: isinstance(1,Iterator) Out[4]: False In [5]: isinstance((1,2),Iterable) Out[5]: True In [6]: isinstance((1,2),Iterator) Out[6]: False
In [7]: class D(): ...: def __iter__(self): ...: pass ...: def __next__(self): ...: pass ...: In [8]: d = D() In [9]: isinstance(d,Iterator) Out[9]: True In [10]:
python實(shí)現(xiàn)迭代:列如,用迭代實(shí)現(xiàn)斐波那契數(shù)列:
class Fibonacci(object): def __init__(self,all_num): """初始化類屬性""" #定義一個(gè)實(shí)例屬性,存放要實(shí)現(xiàn)斐波那契數(shù)列的個(gè)數(shù) self.all_num = all_num #定義count實(shí)例屬性,作為迭代的退出條件判斷 self.count = 0 #實(shí)現(xiàn)斐波那契數(shù)列定義a=0,b=1 self.a = 0 self.b = 1 def __iter__(self): """在這里self所指3對(duì)象本身是一個(gè) 迭代器,所以可以返回自身 """ return self def __next__(self): """ next,實(shí)現(xiàn)迭代返回結(jié)果 """ #判斷輸出的數(shù)列個(gè)數(shù),是否小于需要的數(shù)列個(gè)數(shù) if self.count < self.all_num: #rect最終要輸出的斐波那契數(shù)列 rect = self.a #在這里重復(fù)讓a=b,b=a+b,來實(shí)現(xiàn)斐波那契數(shù)列 self.a, self.b = self.b, self.a + self.b self.count += 1 return rect else: #當(dāng)?shù)龅絊topIteration異常時(shí)便會(huì)停止迭代 raise StopIteration fibonacci = Fibonacci(10) for fibo_num in fibonacci: print(fibo_num)
迭代:通過存儲(chǔ)一種生成方式,而不是生成結(jié)果,來實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ)。從而極大的節(jié)約了存儲(chǔ)空間。
注意:
在python2.x中 range()函數(shù)后面存的是一個(gè)列表,xrange()存的是一個(gè)可迭代對(duì)象。而在python3.x中range()存的是一個(gè)迭代對(duì)象,相當(dāng)于python2.x中的xrange()。
以上是python中的迭代是什么的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道!