python中實現(xiàn)迭代器(iterator)的方法示例
概述
迭代器是訪問集合元素的一種方式。迭代器對象從集合的第一個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會后退。
延遲計算或惰性求值 (Lazy evaluation)
迭代器不要求你事先準備好整個迭代過程中所有的元素。僅僅是在迭代至某個元素時才計算該元素,而在這之前或之后,元素可以不存在或者被銷毀。這個特點使得它特別適合用于遍歷一些巨大的或是無限的集合。
今天創(chuàng)建了一個實體類,大致如下:
class Account(): def __init__(self, account_name, account_type, account_cost, return_amount=0): self.account_name = account_name # 賬戶名 self.account_type = account_type # 賬戶類型 self.account_cost = account_cost # 月結費用 self.return_amount = return_amount # 返還金額
然后創(chuàng)建一個實體列表:
accounts = [Account("張三", "年費用戶", 450.00, 50),
Account("李四", "月結用戶", 100.00),
Account("楊不悔", "月結用戶", 190.00, 25),
Account("任我行", "月結用戶", 70.00, 10),
Account("凌未風", "年費用戶", 400.00, 40)]
我想要執(zhí)行next()功能,也就是需要的時候“next”一下,得到List中的下一個元素。
直接測試一下:

結果發(fā)現(xiàn)List不支持next()特性。這時候,List只是一個iterable,而不是iterator。
iterable和iterator的區(qū)別如下:
- iterable —— 只實現(xiàn)了__iter__的對象;
- iterator —— 同時實現(xiàn)了__iter__和__next__方法的對象。
其中, __iter__返回iterator對象, __next__則返回迭代過程的下一個元素。
1. 讓列表成為iterator
要讓前面的accounts List成為iterator只需簡單的一個iter()函數(shù):
accounts_iterator = iter(accounts) (next(accounts_iterator)).account_name
結果如下圖所示:

這么簡單的函數(shù),估計還是有不少Python開發(fā)者不知道吧?
2. 自定義iterator對象
擴展開來講,如何定義自己的iterator對象呢?其實也就是按照上面的定義,實現(xiàn)__iter__和__next__方法。
我們接下來定義一個AccountIterator類:
class AccountIterator():
def __init__(self, accounts):
self.accounts = accounts # 賬戶集合
self.index = 0
def __iter__(self):
return self
def __next__(self):
if self.index >= len(self.accounts):
raise StopIteration("到頭了...")
else:
self.index += 1
return self.accounts[self.index-1]
運行結果如:

通過這一陣折騰,next()功能就實現(xiàn)了。Python有不少意外的功能,還等著我們不斷去探究,也許這就是Python的魅力及極客之處。
總結
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家學習或者使用python能帶來一定的幫助,如果有疑問大家可以留言交流。
相關文章
python3 selenium自動化測試 強大的CSS定位方法
今天小編就為大家分享一篇python3 selenium自動化測試 強大的CSS定位方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-08-08
在Python3 numpy中mean和average的區(qū)別詳解
今天小編就為大家分享一篇在Python3 numpy中mean和average的區(qū)別詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-08-08
Python+Tkinter創(chuàng)建一個簡單的鬧鐘程序
這篇文章主要為大家詳細介紹了如何使用 Python 的 Tkinter 庫創(chuàng)建一個簡單的鬧鐘程序,它可以在指定的時間播放一個聲音來提醒你,感興趣的可以學習一下2023-04-04
Python繪制數(shù)據(jù)動態(tài)圖的方法詳解
這篇文章主要為大家詳細介紹了如何利用Python語言繪制好看的數(shù)據(jù)動態(tài)圖,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起動手嘗試一下2022-07-07

