生成器是迭代器的一种
生成器得是一种函数以及函数内部有yield而不是return来返回值(注:python2)
生成器实现了迭代器协议(即对象必须有next方法。注:python3是__next__方法)
除此外生成器还实现了send方法以及close方法
关于send()方法需要注意的是:调用send传入非None值前,生成器必须处于挂起状态,否则将抛出异常。也就是说,第一次调
用时,要使用next()语句或send(None),因为没有yield语句来接收这个值。
关于close()方法
这个方法用于关闭生成器,对关闭的生成器后再次调用next或send将抛出StopIteration异常。
而迭代对象是指实现了__iter__方法的对象。可迭代对象__iter__方法负责返回一个迭代器。
所以迭代对象可以是迭代器,也可以迭代对象不是一个迭代器(即__iter__方法返回的对象不是当前迭代对象)
如果一个迭代对象也是迭代器那么该迭代对象不可以多次遍历(比如生成器)
如果一个迭代对象不是迭代器那么该迭代对象是可以多次遍历的(比如一个list对象可以多次使用for循环遍历)
使用for语句的时候,for语句就会自动的通过可迭代对象的__iter__()方法来获得迭代器对象,并且通过next()方法来获取下一个元素。
相关资料:http://python.jobbole.com/81881/