python中的生成器和迭代器

个人觉得iterator和yield实现的是相同的功能,只不过iterator需要在类中实现,yield实在函数中实现,二者均会保存当前循环的状态.

生成器也是由迭代器实现的

#!/usr/bin/env python#coding: utf-8def MyGenerator(*args): #定义一个生成器for i in args:yield i#定义三个函数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] #有三个函数的列表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):passdef next(self):if self.step < self.total_funcs: #当目前所执行的函数所在的位置小于总的函数个数时self.step+=1 #stepreturn self.func_list[self.step-1] #执行当前函数else:raise StopIterationc=MyIterator(function_list)print apply(c.next(),('Lee',29))print apply(c.next())print apply(c.next())

可以有一个人陪着你,也可以你一个人,总之那一刻,

python中的生成器和迭代器

相关文章:

你感兴趣的文章:

标签云: