码迷,mamicode.com
首页 > 其他好文 > 详细

迭代器,生成器

时间:2018-02-06 20:28:17      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:exce   9.png   def   iterator   range   并且   协议   post   循环   

---恢复内容开始---

一,什么是可迭代对象?迭代对象与迭代器的区别?

只含有__iter__方法的数据是可迭代对象  含有__iter__方法,并且含有__next__方法的数据是迭代器

拥有__iter__方法的对象叫可迭代对象 遵循可迭代协议.

1 判断是否为可迭代对象   dir()显示对象的所有方法

可迭代对象有:str list tuple dict set range

第一种方法
s = abc print(__iter__ in dir(s)) print(__iter__ in dir(333))

结果:

技术分享图片

方法二  导入一个模块  from collections import Iterable 

l = [1,2,3]
l_iter = l.__iter__()
from collections import Iterable  #判断是否为迭代对象
from collections import Iterator  #判断是否为迭代器
print(isinstance(l,Iterable))
print(isinstance(l,Iterator))
print(isinstance(l_iter,Iterator))
print(isinstance(l,list))

结果:

技术分享图片

二.迭代器  具有__iter__并且具有__next__方法的对象叫迭代器   遵循迭代器协议

迭代器的意义?

1,迭代器节省内存.

2,迭代器惰性机制.

3,迭代器不能反复,一直向下执行.

 1. 迭代对象转化成迭代器

#迭代器取值:
s2 = abcd
s3 = s2.__iter__()
print(s3.__next__())
print(s3.__next__())
print(s3.__next__())
print(s3.__next__())

结果:

技术分享图片

for循环与迭代器的比较

# for循环的机制.
#内部含有__iter__方法,他会将可迭代对象先转化成迭代器.
#,然后在调用__next__方法.
# 他有异常处理的方法.
for i in [1,2,3]:
    print(i)

l = [1,2,3]
l_iter = l.__iter__()
while True:
    try:
        print(l_iter.__next__())
    except StopIteration:
        break

结果:

技术分享图片

三 什么是生成器?
生成器的本质就是迭代器,
1 生成器是自己用python代码写的迭代器.
1,可以用生成器函数
2,可以用各种推导式构建迭代器.
3,可以通过数据转化.
#生成器函数 生成器
def gener():
    print(aaa)
    yield 222    #一个yield打印一次
    print(bbb)
    yield 333
    print(ccc)
g = gener()    #g为生成器的内存地址
print(g)
print(g.__next__())

结果:

技术分享图片

2 return yield 区别
return 返回给调用者值,并结束此函数.
yiled 返回给调用者值,并将指针停留着当前位置.
def gener():
    yield 222
    count = yield 333
    print(-------->,count)
    b=yield aaa
    print(b)
    a = yield aaa
    print (a)
g = gener()
print(g.send(None))
print(g.send(None))
print(g.send(AAAA))
print(g.send(wwwwww))

结果:

技术分享图片

 

迭代器,生成器

标签:exce   9.png   def   iterator   range   并且   协议   post   循环   

原文地址:https://www.cnblogs.com/wzbk/p/8423571.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!