Python 迭代器和生成器
Posted 1328497946ts
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 迭代器和生成器相关的知识,希望对你有一定的参考价值。
迭代是重复反馈过程的活动,其目的通常是为了逼近所需目标或结果。每一次对过程的重复称为一次“迭代”,而每一次迭代得到的结果会作为下一次迭代的初始值。迭代是Python强大的功能之一,是访问集合元素的一种方式。迭代器是一个可以记住遍历位置的对象,在遍历字符串,列表或元组对象时非常有用。
一、迭代器
1、什么是可迭代对象
如果给定一个list或tuple,可以通过for循环来遍历这个list或tuple,这种遍历称为迭代(Iteration),被遍历的list或tuple被称为可迭代对象。除了list或tuple外,还有很多可以被迭代的对象,如str、set、tuple等。
>>> x = [100, 200, 300] >>> y = iter(x) >>> z = iter(x) >>> next(y) >>> next(y) >>> next(z) >>> next(z) >>> type(x) >>> type(y)
运行结果如下所示
这里x是一个可迭代对象,可迭代对象并不是指某种具体的数据类型,list是可迭代对象,dict是可迭代对象,set也是可迭代对象。y和x是两个独立的迭代器,迭代器内部有一个状态,改状态用于记录当前迭代所在的位置,以便下次迭代式获取正确的元素。
在python中,迭代使用过for...in来完成的。例如:
for a in bb: print(a, end="")
2、什么是迭代器
迭代器是一个可以记住遍历位置的对象。迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器有两个基本的方法:iter()和next()。其中,iter()方法用于创建迭代器对象:next()用于遍历对象的元素。在遍历字符串,列表或元组对象时经常会用到迭代器。例如:
>>> lis = ["苹果", "香蕉", "橘子", "桃子"] >>> aa = iter(lis) >>> next(aa) >>> next(aa) >>> next(aa) >>> next(aa) >>> next(aa) #超出遍历的范围时会报错
运行结果如下图所示
迭代器智能向前遍历元素,不能后退。
迭代器对象可以使用常规的for语句或while语句进行遍历。例如:
>>> lis = ["香蕉", "橘子", "苹果", "桃子"] >>> bb= iter(lis) >>> for a in bb: print(a, end="") >>>香蕉 橘子 苹果 桃子
3、自定义迭代器
通过定义一个实现迭代器协议方法的类,即可自定义一个迭代器。
class MyIterator: def __init__(self, x=3, xmax=300): self.__mul,self.__x = x, x self.__xmax = xmax def __iter__(self): return self def __next__(self): if self.__x and self.__x != 1: self.__mul *= self.__x if self.__mul <= self.__xmax: return self.__mul else: raise StopIteration else: raise StopIteration if __name__ == ‘__main__‘: myiter = MyIterator() for i in myiter: print("迭代的数据元素为:",i)
以上是关于Python 迭代器和生成器的主要内容,如果未能解决你的问题,请参考以下文章