迭代器,生成器与装饰器

迭代:类似于循环,每一次重复的过程被称为一次迭代的过程,而每一次迭代得到的结果会被用来作为

下一次迭代的初始值,提供迭代方法的容器称为迭代器,通常接触的迭代器有序列(列表、元组、字符串),

还有字典也是迭代器,都支持迭代的操作。

关于迭代,python提供了两个BIF:iter(),  next()

对一个容器对象调用iter()就得到它的迭代器,调用next()迭代器就会返回下一个值,如果迭代器没有值可以返回了,

python就会抛出StopIteration的异常。

关于实现迭代器的魔法方法有两个:__iter__() , __next__()

一个容器如果是迭代器,那就必须实现__iter__()魔法方法,这个方法实际上是返回迭代器本身,接下来重点是要实现

__next__()魔法方法,因为它决定了迭代的规则。

class MyIterator:   #创建一个迭代器
	def __init__(self,x=2,xmax=100):  #构造函数
		self.__mul,self.__x = x,x
		self.__xmax=xmax
	def __iter__(self):  #迭代器的协议方法
		return self   #返回的是类本身
	def __next__(self):
		if self.__x:
			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)
迭代的元素为: 4
迭代的元素为: 8
迭代的元素为: 16
迭代的元素为: 32
迭代的元素为: 64
[Finished in 0.4s]

利用iter函数定义迭代器:

class Counter:
	def __init__(self,x=0):
		self.x=x
counter=Counter()
def used_iter():
	counter.x+=2
	return counter.x
for i in iter(used_iter,8):
	print('本次遍历的数值:',i)
本次遍历的数值: 2
本次遍历的数值: 4
本次遍历的数值: 6
[Finished in 0.3s]

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值