成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

弄懂這 5 個問題,拿下 Python 迭代器!

開發 后端
本篇專題寫作思路,由幾個問題,逐步討論迭代器存在的價值、使用的方法、以及如何轉化為自身武器并真正用到日常Python中。

本篇專題寫作思路,由幾個問題,逐步討論迭代器存在的價值、使用的方法、以及如何轉化為自身武器并真正用到日常Python中。

第一個問題:什么是迭代器?

迭代器,英文 Iterator,它首先是個對象,其次它是訪問可迭代序列(Iterable)的一種方式。通常其從序列的第一個元素開始訪問,直到所有的元素都被訪問才結束。

迭代器又是一個特殊的對象,特殊在于它必須實現兩個方法:__iter__和__next__.

第二個問題:為什么要有迭代器?

迭代器存在的一個最重要價值:節省內存,這在小數據量時無足輕重。

但是,當數據量大或者對程序要求性能高時,它的價值凸顯。

第三個問題:迭代器怎么節省內存了?

只知道使用迭代器能節省內存,但卻不知道怎么使用才能節省內存,下面就來回答這個問題。

首先創建一個list:

  1. In [1]: a=[1,3,5,9,10] 

其次,列表內每個元素+1,創建一個新列表

  1. In [2]: a1 = [i+1 for i in a]   

依次打印a1中每個元素:

  1. In [8]: for i in a1:  
  2.    ...:     print(i)  

上面操作等價于:

  1. a1 = [] 
  2. for i in a: 
  3.   a1.append(i+1) 
  4. for i in a1: 
  5.   print(i) 

空間復雜度為 O(n),n為列表a內元素個數。

但是,使用迭代器實現上面的元素+1并打印的空間復雜度是多少呢?

  1. ait = (i+1 for i in a) # 得到生成器,也是一種特殊的迭代器 
  2. for i in ait: 
  3.   print(i) 

上面操作等價于:

  1. for i in a: 
  2.   print(i+1) 

不需要額外空間,所以使用迭代器加1并打印的空間復雜度為O(1).

結論:迭代器更加節省空間!

第四個問題:如何自定義一個迭代器?

上面說過,迭代器對象必須要實現兩個方法,為了更加具體,我們演示如何自定義一個迭代器。

自定義一個迭代器,實現斐波那契數列:

  1. #斐波那契數列 
  2. class Fabs(): 
  3.     def __init__(self,max): 
  4.         self.max=max 
  5.         self.n,self.a,self.b=0,0,1 
  6.      
  7.     #定義__iter__方法 
  8.     def __iter__(self): 
  9.         return self 
  10.          
  11.     #定義__next__方法 
  12.     def __next__(self): 
  13.         if self.n<self.max: 
  14.             tmp=self.b 
  15.             self.a,selfself.b=self.b,self.a+self.b 
  16.             self.n+=1 
  17.             return tmp 
  18.         raise StopIteration 

使用這個迭代器,打印斐波那契數列前10項:

  1. In [13]: for item in Fabs(10):  
  2.     ...:     print(item,end=' ')                                                                     
  3. 1 1 2 3 5 8 13 21 34 55  

第五個問題:迭代器使用有哪些注意事項?

迭代器只能前進不能回退!

也就是說一旦迭代結束,要想再使用此迭代器對象從頭開始遍歷元素,將是不可行的!

  1. In [14]: a=iter([1,4,5])  
  2.  
  3. In [16]: next(a)                                                                 
  4. Out[16]: 1 
  5.  
  6. In [17]: next(a)                                                                 
  7. Out[17]: 4 
  8.  
  9. In [18]: next(a)                                                                 
  10. Out[18]: 5 
  11.  
  12. # 要想再使用此迭代器對象從頭開始遍歷元素,將是不可行的! 
  13. In [19]: next(a)                                            
  14. # 拋出異常:StopIteration:  

使用內置函數iter,可將Iterable序列轉化為迭代器。

最后總結:

  • 第一個問題:什么是迭代器?
  • 第二個問題:為什么要有迭代器?
  • 第三個問題:迭代器怎么節省內存了?
  • 第四個問題:如何自定義一個迭代器?
  • 第五個問題:迭代器使用有哪些注意事項?

 

責任編輯:趙寧寧 來源: Python與算法社區
相關推薦

2020-10-05 21:57:43

Python生成器可迭代對象

2020-05-13 11:19:30

SaaS云計算技術

2016-03-28 10:39:05

Python迭代迭代器

2021-01-10 23:36:52

SQL數據庫技術

2018-08-30 07:03:49

2020-01-09 12:11:02

Python 開發編程語言

2020-07-26 00:40:48

JavaScript開發代碼

2021-10-28 19:21:56

GolangGo變量

2017-06-26 16:26:15

Python迭代對象迭代器

2022-10-26 08:25:06

Python編程迭代器

2021-11-28 08:03:41

Python迭代器對象

2019-11-29 10:03:43

5G技術智能家居

2020-06-09 08:00:52

Python開發代碼

2022-05-16 07:48:54

Python操作類型

2020-07-14 07:12:19

云安全AI無服務器

2021-02-03 13:03:00

編程程序員語言

2015-11-10 12:24:36

創業問題思路

2020-05-28 13:11:37

Python編碼 開發

2024-09-18 13:49:42

2020-07-16 08:04:21

瀏覽器緩存策略
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 在线高清免费观看视频 | 国产一区www| 国产成人精品一区二区三区 | 99pao成人国产永久免费视频 | 伊人久久成人 | 成人午夜免费视频 | 伦理午夜电影免费观看 | 男人天堂网址 | 国产精品久久久久久吹潮日韩动画 | 中文字幕在线免费视频 | 午夜成人在线视频 | 亚洲成人一区 | 欧美 日韩 中文 | 亚洲精品久久久久久下一站 | 国产精品五月天 | 伊人激情网 | 亚洲成人免费视频在线观看 | 一片毛片 | 欧美精品福利视频 | 午夜看电影在线观看 | 久久91av| 精品一区在线 | 在线观看免费福利 | 一区二区精品 | 美女毛片免费看 | 99欧美精品 | 国产福利一区二区 | 欧美中文字幕一区二区三区 | 欧美精品福利视频 | 拍真实国产伦偷精品 | 一个色在线 | 97精品久久 | 中文字幕亚洲一区二区三区 | 国产精品免费一区二区三区四区 | 中文在线a在线 | 中文字幕乱码视频32 | 九九精品久久久 | 精品国产色 | 国产电影一区二区 | 九九热在线免费视频 | 二区视频 |