首页 > 编程语言 > 详细

Python迭代器和生成器

时间:2018-02-06 19:15:32      阅读:189      评论:0      收藏:0      [点我收藏+]

一、迭代器

现在已知的可迭代对象:str list tuple dict set range和文件句柄。

但是,什么是可迭代对象?可迭代对象的测量方法。

方法一: dir(被测对象) 如果 他含有__iter__ ,那这个对象就叫做可迭代对象.

下面字符串S就是可迭代对象:

s= ‘abcdef‘
print(‘__iter__‘ in dir(s))
可迭代对象,iterable 与迭代器有什么关系?可迭代对象可以转换成迭代器(可迭代对象.__iter__())。
s1 = s.__iter__()
print(s1) #iterator  遵循迭代器协议
 迭代器的取值:(迭代器.__next__())
#迭代器取值:
s2 = ‘abcd‘
s3 = s2.__iter__()
print(s3.__next__())   #a
print(s3.__next__())   #b
只含有__iter__方法的数据是可迭代对象,含有__iter__方法,并且含有__next__方法的数据是迭代器
#迭代器的判断:有__iter__方法,并且含有__next__方法的数据是迭代器
l = [1,2,3,4]
print(‘__iter__‘ in dir(l))  #True
print(‘__next__‘ in dir(l))  #False
liter = l.__iter__()
print(‘__next__‘ in dir(liter))  #True
print(liter.__next__())     #1
print(liter.__next__())     #2
print(liter.__next__())     #3
print(liter.__next__())     #4

 方法二:测量他是可迭代的还是迭代器:

# 方法二 测试他是迭代器还是可迭代对象
l = [1,2,3]
l_iter = l.__iter__()
from collections import Iterable
from collections import Iterator
print(isinstance(l,Iterable))      #True
print(isinstance(l,Iterator))      #False
print(isinstance(l_iter,Iterator)) #True
print(isinstance(l,list))          #Truedied  

 迭代器的意义:

   1)、迭代器节省内存.
   2)、迭代器惰性机制.
   3)、迭代器不能反复,一直向下执行.

 for 循环的内部机制:

    1)、内部含有__iter__方法,他会将可迭代对象先转化成迭代器.
    2)、然后在调用__next__方法.
    3)、for循环有异常处理的方法. 

#用迭代器来表示for循环的内部机制
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

 二、生成器 

 


 

 

 

Python迭代器和生成器

原文:https://www.cnblogs.com/Ming-Hui/p/8423332.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!