鱼c笔记——Python魔法方法六:迭代器

迭代类似于循环,每一次重复的过程被成为一次迭代的过程,每一次迭代得出的结果会被用作下一迭代的初始值。

提供迭代方法的容器我们成为迭代器。

通常我们接触到的迭代器有序列,字典。

我们通常使用for语句来进行迭代。

>>> for i in "Harry Potter":
	print(i, end = ' ')

	
H a r r y   P o t t e r 

for语句的作用就是触发这个迭代器的迭代功能,每次从容器中拿出一个数据,这就是迭代操作。


关于迭代操作,Python提供了两个BIF:iter() 和 next()

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

>>> string = 'me'
>>> it = iter(string)               #it就是一个迭代器了
>>> next(it)
'm'
>>> next(it)
'e'
>>> next(it)
Traceback (most recent call last):
  File "<pyshell#93>", line 1, in <module>
    next(it)
StopIteration

for语句是用来自动调用迭代器的,有了iter() 和next() 这两个方法,我们就可以大概分析出for语句的工作方式了。

>>> string = "Harry"
>>> for each in string:
	print(each, end = " ")

	
H a r r y 

#用上述两个BIF模拟for语句
>>> it = iter(string)
>>> while True:
	try:
		each = next(it)
	except StopIteration:
		break
	print(each, end = " ")

	
H a r r y 

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

一个容器如果是迭代器,那么必须实现__iter__()方法。而__next__()则决定了迭代器的迭代规则

>>> class Fibs:
	def __init__(self):
		self.a = 0
		self.b = 1
	def __iter__(self):
		return self   #本身就是一个迭代器
	def __next__(self):
		self.a, self.b = self.b, self.a + self.b     #相当于self.a0=self.a  self.a=self.b self.b=self.a0+self.b
		return self.a #得到下一个菲波那切数列序列的值

	
>>> fibs = Fibs()
>>> for each in fibs:
	if each < 20:
		print(each, end=" ")
	else:
		break

	
1 1 2 3 5 8 13 

class Fibs:
	def __init__(self, n=10):   #为了控制迭代的范围,设置一个参数n
		self.a = 0
		self.b = 1
		self.n = n
	def __iter__(self):
		return self
	def __next__(self):
		self.a, self.b = self.b, self.a + self.b
		if self.a > self.n:    #当超过设置的范围时
			raise StopIteration
		return self.a

	
>>> fibs = Fibs()
>>> for each in fibs:
	print(each, end=" ")

	
1 1 2 3 5 8


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值