—super—

博客园 首页 新随笔 联系 订阅 管理
迭代:
# 1 重复
# 2 下一次重复是基于上一次的结果
python为了提供一种不依赖于索引的迭代方式,
python会为一些对象内置__iter__方法
obj.__iter__称为可迭代的对象
obj.__iter__() 或者iter(obj)得到的结果就是迭代器

#得到的迭代器:既有__iter__又有一个__next__方法
next(obj)或者obj.__iter__()调用
#迭代器的优点
#1:提供了一种不依赖于索引的取值方式
#2:惰性计算。节省内存

#迭代器的缺点:
#1:取值不如按照索引取值方便
#2:一次性的。只能往后走不能往前退
#3:无法获取长度

迭代器的应用:
1。提供了一种不依赖索引的统一的迭代方法
2. 惰性计算,比如取文件的每一行

 

 

生成器函数:函数体内包含有yield关键字,该函数执行的结果是生成器
生成器本质是将函数变为可迭代的迭代器

yield的功能:
1.与return类似,都可以返回值,但不一样的地方在于yield返回多次值,而return只能返回一次值
2.为函数封装好了__iter__和__next__方法,把函数的执行结果做成了迭代器
3.遵循迭代器的取值方式obj.__next__(),触发的函数的执行,函数暂停与再继续的状态都是由yield保存的
求平均数的生成器
def aveage():
    total = 0
    day = 0
    ave = 0
    while 1:
        ave_num = yield ave
        total+=ave_num
        day+=1
        ave = total/day

g = aveage()
next(g)
print(g.send(30))
print(g.send(40))
print(g.send(20))
print(g.send(30))
View Code

导入模块测试迭代器

from collections import Iterable
from collections import Iterator
View Code
l = [1,2,5,5,4,513,435,4]
print(isinstance(l,Iterator))
print(isinstance(l,Iterable))
View Code

 

posted on 2017-08-02 14:58  —super—  阅读(247)  评论(0编辑  收藏  举报