国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python中實現(xiàn)迭代器(iterator)的方法示例

2020-02-23 04:18:03
字體:
來源:轉載
供稿:網友

概述

迭代器是訪問集合元素的一種方式。迭代器對象從集合的第一個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會后退。

延遲計算或惰性求值 (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]

運行結果如:

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: SHOW| 遵义县| 原阳县| 章丘市| 襄垣县| 维西| 托里县| 丹东市| 会同县| 商洛市| 肃南| 溧水县| 松原市| 东城区| 保靖县| 东港市| 安陆市| 黑河市| 清水县| 富蕴县| 屯留县| 吉林市| 荔波县| 成安县| 白城市| 阳城县| 日喀则市| 稷山县| 当雄县| 精河县| 沁阳市| 海城市| 元朗区| 珠海市| 金塔县| 嵊泗县| 江门市| 东安县| 永丰县| 全州县| 黔西县|