码迷,mamicode.com
首页 > 编程语言 > 详细

Python 迭代器和生成器

时间:2019-09-12 12:52:07      阅读:76      评论:0      收藏:0      [点我收藏+]

标签:turn   code   ==   位置   sel   bsp   mic   生成   ext   

迭代是重复反馈过程的活动,其目的通常是为了逼近所需目标或结果。每一次对过程的重复称为一次“迭代”,而每一次迭代得到的结果会作为下一次迭代的初始值。迭代是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 迭代器和生成器

标签:turn   code   ==   位置   sel   bsp   mic   生成   ext   

原文地址:https://www.cnblogs.com/1328497946TS/p/11509541.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!