熱線電話:13121318867

登錄
首頁精彩閱讀Python迭代和迭代器詳解
Python迭代和迭代器詳解
2016-04-02
收藏
一個對象,物理或者虛擬存儲的序列。list,tuple,strins,dicttionary,set以及生成器對象都是可迭代的,整型數是不可迭代的。如果你不確定哪個可迭代哪個不可以,你需要用python內建的iter()來幫忙。

我們將要來學習python的重要概念迭代和迭代器,通過簡單實用的例子如列表迭代器和xrange。

可迭代

一個對象,物理或者虛擬存儲的序列。list,tuple,strins,dicttionary,set以及生成器對象都是可迭代的,整型數是不可迭代的。如果你不確定哪個可迭代哪個不可以,你需要用python內建的iter()來幫忙。





iter()為list返回了listiterator對象,為dictionary返回了dictionary-keyiterator對象。類似對其他可迭代類型也會返回迭代器對象。

iter()用在自定義的類型會怎樣呢?我們先自己定義一個String類:



那么,st是可迭代的嗎?



你可能會有幾個問題要問:

怎么讓自定義的類型可迭代?

iter()究竟做了些什么?

讓我們補充String類來找找答案



在String類中需要一個’__iter__’方法把String類型變成可迭代的,這就是說’iter’內部調用了’iterable.__iter__()’

別急,不是只有增加’__iter()’方法這一種途徑



‘itr’也會調用’iterable.__getitem__()’,所以我們用’__getitem__’方法讓String類型可迭代。

如果在String類中同時使用’__iter__()’和’__getitem__()’,就只有’__iter__’會起作用。

自動迭代

for循環會自動迭代



我們可以不用for循環來實現嗎?



這樣做對list和string是管用的,但對dictionary不會奏效,所以這絕對不是python式的迭代,也肯定不能模擬for循環的功能。我們先看迭代器,等下回再過頭來。

迭代器

關于迭代器先說幾條………..


我們試一試模仿for循環



前面我們看過了iterable類,我們知道iter會返回迭代器對象。

現在我們試著理解迭代器類的設計。



我們學了夠多的迭代和迭代器,在python程序中不會用到比這更深的了。

但是為了學習的目的我們就到這兒。。。。

列表迭代器

你可能會在面試中寫這個,所以打起精神來注意了



我們來用`list_iter`自己定義一個列表迭代器



從一個問題開始——xrange是迭代還是迭代器?

我們來看看



幾個關鍵點:



它返回了rangeiterator,所以我們完全可以叫它迭代器。

讓我們用最少的xrange函數實現自己的xrange

來源 | 碼農網

責任編輯 | 李佳燕




我喜歡在這里總結這篇文章,歡迎發表評論和疑問。

譯文鏈接:http://www.codeceo.com/article/python-iterable-and-iterator.html
英文原文:Python: Iterable and Iterator

數據分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數據分析師資訊
更多

OK
客服在線
立即咨詢
日韩人妻系列无码专区视频,先锋高清无码,无码免费视欧非,国精产品一区一区三区无码
客服在線
立即咨詢