Python 迭代器和生成器

迭代器  Iterator

什么是迭代器
  迭代器是访问可迭代对象的一种方式,用迭代器可以访问可迭代对象
  迭代器是指iter(可迭代对象) 返回的对象
  迭代器可以用next(it)函数获取可迭代对象的数据

迭代器函数 iter 和 next
  iter(iterable)  从可迭代对象中返回一个迭代器,iterable必须是能提供一个迭代器的对象
  next(iterator)  从迭代器iteraror中获取下一个记录,如果无法获取下一条记录,则触发StopIterator异常

迭代器说明:
  迭代器只能往前取值,不会后退
  用iter函数可以返回一个可迭代对象的迭代器

可迭代对象可以生成一个迭代器

iterable:可迭代的对象

iterator:迭代器

示例:

L=[2,3,5,7]
it=iter(L)  #用iter返回一个迭代器用it绑定

next(it) #2  #用next(it) 用迭代器来获取L中的元素
next(it) #3
next(it) #5
next(it) #7
next(it) #StopIteration  #通知next调用者,已无数据

iter函数通常和可迭代对象(iterable)组合使用,返回一个迭代器,此迭代器相当于一个第三方的容器,此时的it就是第三方容器,只访问可迭代对象,供next函数获取其中的值

next函数通常和迭代器(第三方容器)组合使用,返回可迭代对象中的数值

示例二:

it=iter(range(1,10,3))
next(it)
next(it) # 2  
next(it) # 3
next(it) # 5
next(it) # 7
next(it) # StopIteration

用while语句访问可迭代对象数据:

l=[2,3,5,7]
it=iter(l)
while True:
    try:
        x = next(it)
        print(x)
    except StopIteration:
        break

生成器 generator (python 2.5及之后的版本)
什么是生成器:
  生成器是能够动态提供数据的对象,生成器对象也是可迭代对象

静态提供数据:是指原来就有这个数据,直接从里面拿数据的方法称为静态提供数据

例如: 

l=[2,3,4,5] #已存在的数据
for x in l:
    print(x) #此时的x就是静态拿数据

动态提供数据:是指现用现生成的数据,这个数据不占用计算机的内存,用完就会释放掉

例如:

for i in range(100):
    print(i) #此时的i是动态提取数据,该数据原来不存在,现用现生成的,用完就会释放,不会占用计算机内存

生成器有两种:
  生成器函数
  生成器表达式

生成器函数定义:
  含有yield语句的函数是生成器函数,此函数被调用将返回一个生成器对象
  yield 翻译为:产生或生成

yield语句:
  语法:
    yield 表达式

说明:
  yield 用于def函数中,目的是将此函数作为生成器函数使用
  yield 用来生成数据,供next(it)函数使用

示例:

def myyield(): #此函数为生成器函数
    yield 4
    yield 5
    yield 6
    yield 7
    print("生成器函数调用结束")
gen=myyield()
# print(gen)  # gen绑定生成器对象,此对象为可迭代对象
for x in gen:
    print(x)


 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值