迭代器 生成器

1,迭代器(iterable)
可迭代对象 list,tuple,dict ,str,set 等类型的数据使用for’…in…的循环语法从其中依次拿到数据进行使用,我们把这样的过程称为遍历,也叫迭代
‘class MyList(object):
… def init(self):
… self.container = []
… def add(self, item):
… self.container.append(item)
… def iter(self):
… “”“返回一个迭代器”""
… # 具备了__iter__方法,就是一个可迭代对象
… pass

mylist = MyList()
from collections import Iterable
isinstance(mylist, Iterable)#True,isinstance判断是否是迭代器,返回值为布尔类型
iter()函数与next()函数:
iter()函数获取这些可迭代对象的迭代器。然后我们可以对获取到的迭代器不断使用next()函数来获取下一条数据
lis=[1,2,3]
lis_t=iter(lis)
print(next(lis_t)) #1

生成器
生成器的好处
1,节省资源消耗,和声明序列不同的是生成器在不使用的时候几乎不占内存,也没有声明计算过程
2,使用的时候,生成器是随用随生成,用完即刻释放,非常高效
3,可在单线程下实现并发运算处理效果,非常牛逼,这点不可小视,看看nginxepoll 单线程承载的并发量比多线程还效率高很多,最底层就是这个原理
Python 有两种不同的方式提供生成器
1,生成器函数:类似于列表推导式,但是,生成器返回按需产生结果的一个对象,而不是一次构建一个结果列表,对象G可以通过for…in…来进行循环
( x*2 for x in range(5))
print(next(G)) #0
print(G.next())#2
2,生成器表达式,类似于列表推导,但是,生成器返回按需产生结果的一个对象,而不是一次一次构建一个结果列表,关键字
def test():
i=0
while i <5:
if i ==0:
temp= yield i
else:
yield i
i+=1
t=test()
print(t.next())#0
print(t.next())#1
print(t.send(“haha”))#2

输入一个数,这个数输出是他自身的两倍
def createnums():
a=int(input(“请输入数字:”))
while a<a+1:
a*=2
yield a
b=createnums()
print(b.next())#第一种方式
print(next(b))#第二种方式
print(b.send(“hehe”))#第三种方式

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值