欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python迭代器和生成器介紹

 更新時間:2015年03月06日 09:40:23   投稿:junjie  
這篇文章主要介紹了Python迭代器和生成器介紹,本文分別用代碼實例講解了Python的迭代器和生成器,需要的朋友可以參考下

迭代器

迭代器是一個實現(xiàn)了迭代器協(xié)議的對象,Python中的迭代器協(xié)議就是有next方法的對象會前進到下一結(jié)果,而在一系列結(jié)果的末尾是,則會引發(fā)StopIteration。

在for循環(huán)中,Python將自動調(diào)用工廠函數(shù)iter()獲得迭代器,自動調(diào)用next()獲取元素,還完成了檢查StopIteration異常的工作。

常用的幾個內(nèi)建數(shù)據(jù)結(jié)構(gòu)tuple、list、set、dict都支持迭代器,字符串也可以使用迭代操作。

你也可以自己實現(xiàn)一個迭代器,如上所述,只需要在類的__iter__方法中返回一個對象,這個對象擁有一個next()方法,這個方法能在恰當?shù)臅r候拋出StopIteration異常即可。但是需要自己實現(xiàn)迭代器的時候不多,即使需要,使用生成器會更輕松。

復制代碼 代碼如下:

#!/usr/bin/env python
# coding=utf-8

class test:
    def __init__(self, input_list):
        self.list = input_list
        self.i = 0

    def __iter__(self):
        return self
   
    def next(self):
        if self.i == len(self.list):
            self.i = 0
            raise StopIteration
        self.i += 1
        return  self.list[self.i - 1]

使用迭代器一個顯而易見的好處就是:每次只從對象中讀取一條數(shù)據(jù),不會造成內(nèi)存的過大開銷。

例如:

復制代碼 代碼如下:

/* 把文件一次加載到內(nèi)存中,然后逐行打印。當文件很大時,這個方法的內(nèi)存開銷就很大了 */
for line in open("test.txt").readlines():
    print line

/* 這是最簡單也是運行速度最快的寫法,他并沒顯式的讀取文件,而是利用迭代器每次讀取下一行 */
for line in open("test.txt"):   #use file iterators
    print line

生成器

生成器的編寫方法和函數(shù)定義類似,只是在return的地方改為yield。

生成器中可以有多個yield。當生成器遇到一個yield時,會暫停運行生成器,返回yield后面的值。當再次調(diào)用生成器的時候,會從剛才暫停的地方繼續(xù)運行,直到下一個yield。

生成器自身又構(gòu)成一個迭代器,每次迭代時使用一個yield返回的值。

需要注意的是,生成器中不需要return語句,不需要指定返回值,在生成器中已經(jīng)存在默認的返回語句

生成器表達式

復制代碼 代碼如下:

(i for i in range(5))
// 返回迭代器
<generator object <genexpr> at 0x7ff3e8f0d960>

列表解析,返回list
復制代碼 代碼如下:

[i for i in range(5)]
// 返回list
[0, 1, 2, 3, 4]

 在這里存在一個問題,那就是range(5)會返回一個長度為5的數(shù)據(jù),如果是range(1000)那么就會占用一個1000大小的數(shù)組空間;如果我們采用`生成器`,在需要的時候產(chǎn)生一個數(shù)字,那么空間的占用情況就會降低,這里我們可以使用xrange()函數(shù)來實現(xiàn)。
 

復制代碼 代碼如下:

 '''
xrange
    函數(shù)說明:用法與range完全相同,所不同的是生成的不是一個數(shù)組,而是一個生成器。
xrange示例:
'''
>>> xrange(5)
xrange(5)
>>> list(xrange(5))
[0, 1, 2, 3, 4]
>>> xrange(1,5)
xrange(1, 5)
>>> list(xrange(1,5))
[1, 2, 3, 4]
>>> xrange(0,6,2)
xrange(0, 6, 2)
>>> list(xrange(0,6,2))
[0, 2, 4]

所以xrange做循環(huán)的性能比range好,尤其是返回很大的時候,盡量用xrange吧,除非你是要返回一個列表。

相關文章

  • Python高級用法總結(jié)

    Python高級用法總結(jié)

    Python很棒,它有很多高級用法值得細細思索,學習使用。本文將根據(jù)日常使用,總結(jié)介紹Python的一組高級特性,包括:列表推導式、迭代器和生成器、裝飾器
    2018-05-05
  • Python基于pillow判斷圖片完整性的方法

    Python基于pillow判斷圖片完整性的方法

    這篇文章主要介紹了Python基于pillow判斷圖片完整性的方法,結(jié)合實例形式簡單分析了pillow的安裝及圖片完整性判斷的相關操作技巧,需要的朋友可以參考下
    2016-09-09
  • Python-split()函數(shù)實例用法講解

    Python-split()函數(shù)實例用法講解

    在本篇文章里小編給大家整理的是一篇關于Python-split()函數(shù)實例用法講解,有興趣的朋友們可以學習下。
    2020-12-12
  • Django學習筆記之ORM基礎教程

    Django學習筆記之ORM基礎教程

    ORM,即Object-Relational Mapping(對象關系映射),它的作用是在關系型數(shù)據(jù)庫和業(yè)務實體對象之間作一個映射,下面這篇文章主要給大家介紹了關于Django學習筆記之ORM基礎教程的相關資料,需要的朋友可以參考借鑒,下面來一起看看吧。
    2018-03-03
  • 解決python中顯示圖片的plt.imshow plt.show()內(nèi)存泄漏問題

    解決python中顯示圖片的plt.imshow plt.show()內(nèi)存泄漏問題

    這篇文章主要介紹了解決python中顯示圖片的plt.imshow plt.show()內(nèi)存泄漏問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • 淺談django2.0 ForeignKey參數(shù)的變化

    淺談django2.0 ForeignKey參數(shù)的變化

    今天小編就為大家分享一篇淺談django2.0 ForeignKey參數(shù)的變化,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • Python2和Python3中@abstractmethod使用方法

    Python2和Python3中@abstractmethod使用方法

    這篇文章主要介紹了Python2和Python3中@abstractmethod使用方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-02-02
  • Python錯誤處理操作示例

    Python錯誤處理操作示例

    這篇文章主要介紹了Python錯誤處理操作,結(jié)合實例形式分析了Python使用try...except...finaly語句進行錯誤處理的相關操作技巧與注意事項,需要的朋友可以參考下
    2018-07-07
  • Python查找相似單詞的方法

    Python查找相似單詞的方法

    這篇文章主要介紹了Python查找相似單詞的方法,涉及Python針對字符串的操作技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-03-03
  • 教你用python實現(xiàn)一個無界面的小型圖書管理系統(tǒng)

    教你用python實現(xiàn)一個無界面的小型圖書管理系統(tǒng)

    今天帶大家學習怎么用python實現(xiàn)一個無界面的小型圖書管理系統(tǒng),文中有非常詳細的圖文解說及代碼示例,對正在學習python的小伙伴們有很好地幫助,需要的朋友可以參考下
    2021-05-05

最新評論