迭代器,生成器
Posted wzqwer
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了迭代器,生成器相关的知识,希望对你有一定的参考价值。
---恢复内容开始---
一,什么是可迭代对象?迭代对象与迭代器的区别?
只含有__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\'))
结果:
以上是关于迭代器,生成器的主要内容,如果未能解决你的问题,请参考以下文章
python:可迭代对象,迭代器,生成器函数,生成器的解析举例代码说明