python中的迭代器和生成器

一、迭代器
迭代器可以理解为是一个容器,每次从容器中取出一个数据,就是迭代操作,列表元组字符串和字典都是迭代器,也都支持迭代操作。
迭代器有两个基本的方法:
iter() :对一个容器对象调用iter()就得到它的迭代器。
next():调用 next()迭代器就会返回下一个值,如果没有值返回了就会抛出一个StopIteration的异常。

>>> str1 = 'laohu'
>>> 
>>> data = iter(str1)
>>> 
>>> next(data)
'l'
>>> 
>>> next(data)
'a'
>>> 
>>> next(data)
'o'
>>> 
>>> next(data)
'h'
>>> 
>>> next(data)
'u'
>>> 
>>> next(data)
Traceback (most recent call last):
  File "<pyshell#79>", line 1, in <module>
    next(data)
StopIteration

把一个类作为迭代器需要在类中实现两个方法
iter()::需要返回对象本身
next():返回容器中的下一个元素,当数据取完时,要引发一个StopIteration异常。

>>>#自定义迭代器,通过传入最小值和最大值,返回该范围内所有数值的平方。
>>>
>>> class Number():
	def __init__(self,min,max):
		self.min = min
		self.max = max
	def __iter__(self):
		return self
	def __next__(self):
		num = self.min
		if self.min <= self.max:
			self.min += 1
			return num ** 2
		else:
			raise StopIteration


>>> for i in Number(1,7):
	print(i,end='--')
	
1--4--9--16--25--36--49--

二、生成器
python中函数如果包含了yield关键字,那么这个函数就不再是一个普通函数,而是一个生成器(generator)
生成器就是一个迭代器,在调用生成器的过程中,每次遇到 yield 时函数会暂停并保存运行信息,并在下次执行 next() 方法时从当前位置继续运行

>>> def test_gene():
	print('test generator')
	yield 'h'
	yield 'j'
	yield 'y'

	
>>> my_gene = test_gene()
>>> 
>>> next(my_gene)
test generator
'h'
>>> next(my_gene)
'j'
>>> next(my_gene)
'y'
>>> next(my_gene)
Traceback (most recent call last):
  File "<pyshell#113>", line 1, in <module>
    next(my_gene)
StopIteration
>>> 

yield 与 return 的区别:
a、return 语句执行后,会跳出当前函数,yield 不会。
b、yield 会保存当前的执行状态,再次调用会从上次暂停的位置继续执行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值