python中的產生器和迭代器,python產生器代器

來源:互聯網
上載者:User

python中的產生器和迭代器,python產生器代器

個人覺得iterator和yield實現的是相同的功能,只不過iterator需要在類中實現,yield實在函數中實現,二者均會儲存狀態

產生器也是由迭代器實現的

#!/usr/bin/env python#coding: utf-8#定義三個函數        def Lee(name,age):    return 'I am %s,I am %d old' %(name,age)    def Marlon():    return 'I am Marlon'    def Allen():    return 'I am Allen'    function_list=  [Lee,Marlon,Allen]  #有三個函數的列表#定義一個產生器 def MyGenerator(*args):    for i in args:        yield i        a=MyGenerator(*function_list) #產生器print apply(a.next(),('Lee',29)) #執行next()方法,這時會儲存現在的執行狀態,下一次調用next()方法時,會用到此狀態print apply(a.next())print apply(a.next())#為什麼yield有next方法? 看下面迭代器的列子,就會明白為什麼產生器是由迭代器實現的#下面是迭代器的例子, 一個類如果實現了__iter__方法,和next()方法,就叫做迭代器      class MyIterator(object):    def __init__(self,funcs):        self.total_funcs=len(funcs)#記錄總共需要執行多少個函數        self.func_list=funcs #記錄所有函數        self.step = 0 #記錄當前執行到哪一個函數    def __iter__(self):        pass    def next(self):                if self.step < self.total_funcs: #當目前所執行的函數所在的位置小於總的函數個數時            self.step+=1 #step            return self.func_list[self.step-1] #執行當前函數        else:            raise StopIteration       c=MyIterator(function_list)print apply(c.next(),('Lee',29))print apply(c.next())print apply(c.next())


 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.