python迭代器,生成器

迭代器

例如:一个列表执行了__iter__()之后返回值就是一个迭代器
没执行就不是迭代器

l = [1,2,3]
#能循环
#list dict str set tuple f=open() range() enumerate
#dir()返回 拥有的所有方法
#能被for循环的数据类型,一定拥有__iter__方法
#iterator迭代器
l.__iter__().__next__()
next 方法可以帮助一个一个取值

可迭代协议:只要含有__iter__方法都是可迭代的
迭代器协议:内部含有__next__()和__iter__方法就是迭代器
迭代器好处:

  1. 从容器类型中一个一个取值,把所有值都取到
  2. 节省内存空间(一个一个给,并不是已经生成好的)

生成器

#生成器函数---本质是自己写的生成器函数
def generator():
	print(1)
	return 'a'
ret = generator()
print(ret)
#只要含有yield关键字的函数都是生成器函数,yield和return不能同时用且需要写在函数内
#生成器函数:执行之后得到一个生成器作为返回值
def generator():
	print(1)
	yield 'a'
ret = generator()
print(ret)

输出结果:

<generator object generator at 0x000000000DF2990>

print(ret.__next__())#使用next()方法时第一次触发了生成器执行

1
a

yield和return不同的是return完程序结束,yield不会结束函数,直到遇到StopIteration

yield和next配合可以控制生成器函数的执行

def wahaha():
	for i in range(2000000):
		yield '娃哈哈%s'%i

g = wahaha()
for i in g:
	print(i)
#可以执行这个
#若只想要50个
count = 0
for i in g:
	count +=1
	print(i)
	if count>50:
		break
#得到前50个
g.__next__()#继续得到第51个
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值