Python基础(迭代器、生成器)

迭代器

字符串和整数的区别:

	dir(str)
	dir(int)
	字符串有__iter__
	整数没有__iter__

迭代对象与迭代器
什么是迭代对象

只要能被循环遍历的对象,就被称为迭代对象
一个对象或者类包含了__iter__()魔术方法,这个 类/对象,就是可迭代对象
__iter__()魔术方法:
	通过这个得到的是当前对象的迭代器
	iter(可迭代对象) 返回的是迭代器
	通过__next__()方法可以遍历当前对象的数据
		next(迭代器)
	__next__ 获取元素
	__length_hint__ 获取迭代器中剩余元素个数
	__setstate__ 决定取值的位置

什么是迭代器

是一个可以记住遍历位置的对象
一个包含__next__()魔术方法的对象

迭代器特点

可迭代对象是可以使用循环遍历的一种特殊数据
比如字符串,该对象包含了一个__iter__魔术方法
通过魔术方法的执行可以得到该对象的迭代器

自定义一个迭代器:

class Persion:
	def __init__(self, fa = ['小王', '小李','小孙']):
		self.fa = fa
		self.index = 0
	def __iter__(self):
		# 返回当前对象
		return self
	def __next__(self):
		d = self.fa[self.index]
		self.index += 1
		return d

p = Persion()
print(p.__next__())
print(p.__next__())
print(p.__next__())

生成器

生成器就是一边循环,一边计算的机制,称为生成器

为什么要使用生成器
通过生成器生成,进行优化 ,记录生成数据的方法,需要一个数据就生成一个数据,而不是一次性将所有数据生成出来,避免了内存开销过大,耗时过长的问题

生成器创建的两种方式

1、生成器表达式
	格式:将列表推导式的[]改为()
	访问数据:next()函数  这种方式超出范围时会报错
	生成器的本质就是迭代器,所以可以使用循环遍历,但是同一个数据不能生成两次

2、生成器函数
	一个包含yield关键字的函数就是生成器函数


在这里插入图片描述
一个函数中可以写多个yield

	yield和return类似都是用于返回数据的,但是yield不会结束函数,会记录函数当前执行的位置
	下次再使用生成器时,从当前记录的位置开始执行

send() 获取下一个值的结果,和next()方法基本一样,但是在获取下一个值的时候给上一个yield位置传递一个数据
使用时需要注意

第一次使用生成器的时候使用next(),
如果使用send必须传参数None
最后一个yield不能接受外部的值
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值