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())