构成可迭代对象的要素
在python中,构成可迭代对象的要素有:字符串、列表、元组、字典、集合等。
可以对list、tuple、dict、set、str等类型的数据使用for...in...的循环语法从其中依次拿到数据进行使用,把这样的过程称为遍历,也叫迭代。把可以通过for...in...这类语句迭代读取一条数据供我们使用的对象称之为可迭代对象(Iterable)。
可迭代对象通过iter方法向我们提供一个迭代器,在迭代一个可迭代对象的时候,实际上就是先获取该对象提供的一个迭代器,然后通过这个迭代器来依次获取对象中的每一个数据。那么也就是说,一个具备了iter方法的对象,就是一个可迭代对象。
迭代器的特点
对于迭代器,如果只想获得下一个元素而不是遍历,可以调用next方法而实现,不过,我们往往不会直接调用Python中的特殊方法,内建函数next可以帮助我们获取迭代器的下一个元素,next在内部会调用迭代器的next方法。
同时,需要注意,迭代器只能迭代一轮,也就是说,如果容器中已经没有可用的元素,则迭代器就不能再次使用了(再次调用next函数获取下一个元素会产生异常),如果想要重新进行迭代,需要再次调用iter函数获取一个新的迭代器对象。
构成可迭代对象的要素为:字符串、列表、元组、字典、集合。
对于迭代器,如果只想获得下一个元素而不是遍历,可以调用next方法而实现,不过,我们往往不会直接调用Python中的特殊方法,内建函数next可以帮助我们获取迭代器的下一个元素,next在内部会调用迭代器的next方法。
下面以列表举个栗子,列表是可迭代对象,所以可以用iter()方法,查看返回值,发现该返回值也是可迭代对象,也就是说列表是可迭代对象,列表执行完iter()方法后也是可迭代对象,那么可以猜得到那个返回值应该就是迭代器了,然后执行next()方法果然可以从里面取值。
生成器介绍:
生成器其实是一种特殊的迭代器,不过这种迭代器更加优雅。它不需要再像上面的类一样写__iter__()和__next__()方法了,只需要一个yiled关键字。 生成器一定是迭代器(反之不成立),因此任何生成器也是以一种懒加载的模式生成值。