一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - python中實現迭代器(iterator)的方法示例

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

2020-09-18 10:44瓜園耕讀 Python

我們經常需要遍歷一個對象中的元素,在Python中這種功能是通過迭代器來實現的。下面這篇文章主要給大家介紹了python中實現迭代器(iterator)的方法示例,需要的朋友可以參考借鑒,下面來一起看看吧。

概述

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

延遲計算或惰性求值 (Lazy evaluation)

迭代器不要求你事先準備好整個迭代過程中所有的元素。僅僅是在迭代至某個元素時才計算該元素,而在這之前或之后,元素可以不存在或者被銷毀。這個特點使得它特別適合用于遍歷一些巨大的或是無限的集合。

今天創建了一個實體類,大致如下:

?
1
2
3
4
5
6
7
8
9
10
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 # 返還金額

然后創建一個實體列表:

?
1
2
3
4
5
accounts = [Account("張三", "年費用戶", 450.00, 50),
  Account("李四", "月結用戶", 100.00),
  Account("楊不悔", "月結用戶", 190.00, 25),
  Account("任我行", "月結用戶", 70.00, 10),
  Account("凌未風", "年費用戶", 400.00, 40)]

我想要執行next()功能,也就是需要的時候“next”一下,得到List中的下一個元素。

直接測試一下:

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

結果發現List不支持next()特性。這時候,List只是一個iterable,而不是iterator。

iterable和iterator的區別如下:

  1. iterable —— 只實現了__iter__的對象;
  2. iterator —— 同時實現了__iter__和__next__方法的對象。

其中, __iter__返回iterator對象, __next__則返回迭代過程的下一個元素。

1. 讓列表成為iterator

要讓前面的accounts List成為iterator只需簡單的一個iter()函數:

?
1
2
accounts_iterator = iter(accounts)
(next(accounts_iterator)).account_name

結果如下圖所示:

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

這么簡單的函數,估計還是有不少Python開發者不知道吧?

2. 自定義iterator對象

擴展開來講,如何定義自己的iterator對象呢?其實也就是按照上面的定義,實現__iter____next__方法。

我們接下來定義一個AccountIterator類:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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]

運行結果如:

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

通過這一陣折騰,next()功能就實現了。Python有不少意外的功能,還等著我們不斷去探究,也許這就是Python的魅力及極客之處。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家學習或者使用python能帶來一定的幫助,如果有疑問大家可以留言交流。

原文鏈接:http://www.2gua.info/post/64

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 日韩精选| 国产精品久久久久不卡绿巨人 | 亚洲一级视频在线观看 | 亚洲国产精品自产在线播放 | 国产精品精品 | 天海翼黄色三级 | 超h 超重口 高h 污肉1v1 | 9丨精品国产高清自在线看 9久热这里只有精品免费 | 欧美精品成人a多人在线观看 | 干b视频在线观看 | 国产自在自线午夜精品之la | 成人在线免费观看视频 | 国产nv精品你懂得 | 日韩版码免费福利视频 | 色淫阁小说 | 欧美成狂野欧美在线观看 | 四虎免费在线观看视频 | 成人动漫在线免费看 | 成人影院vs一区二区 | 国产成人免费片在线观看 | 欧美巨吊 | 6969精品视频在线观看 | 成熟女人50岁一级毛片不卡 | 亚洲图片综合网 | 日本免费一二区 | 思敏1一5集国语版免费观看 | 欧美精品一区二区在线观看 | 国产巨大bbbb俄罗斯 | 午夜家庭影院 | 美女扒开屁股让我桶免费 | 亚洲日日做天天做日日谢 | 成人男女啪啪免费观看网站 | 菠萝视频在线完整版 | 亚洲九九九 | 高清在线观看免费 | 欧美大片一级片 | 国产欧美日韩一区二区三区在线 | 午夜福利试看120秒体验区 | 美女天天操| 乌克兰精品摘花处破 | 大学生宿舍飞机 free |