python中的迭代器

(1) 什么是迭代器

所有可以用来执行“循环”操作的对象都必须是可迭代对象Iterable,即这类对象每次返回一个成员(元素)。
基于Iterable,又衍生了Iterator和Generator两个数据结构。

(2) 迭代器存在的原因:

一言以蔽之就是节省内存。如果需要遍历一个很大的list, 内存不用开辟很大的一片空间来装整个list, 只需要分配list中一个元素大小的空间(假设list中每个元素所占内存大小一一样)即可。

(3) 设计思路:

1) Iterable可迭代对象

feature:

  • 拥有__iter__()或者__getitem__()函数

功能:

  • 每次循环返回一个对象

2) Iterator迭代器

feature:

  • 拥有__iter__()函数
  • 拥有__next__()函数(python3)(拥有next()函数)

功能:

  • 迭代器一定是可迭代对象Iterator
  • 相比于Iterable, Iterator可通过next函数控制每次返回的值

3) Generator生成器

feature:

  • 含有yield关键字

功能:

  • 生成器一定是一个迭代器
  • 生成器可以从next函数上次函数的地方继续往下执行

(4)代码实现

1) 使用迭代器,打印数组中基数下标的元素

case: 迭代器

2) 使用生成器, 依次返回由三个元素返回的子数组

case:生成器1

case:生成器2

>>> list_square = [x*x for x in range(5)]
>>> list_square
[0, 1, 4, 9, 16]
>>> type(list_square)
<type 'list'>
>>> generator_square = (x*x for x in range(5))
>>> generator_square
<generator object <genexpr> at 0x105fba870>
>>> type(generator_square)
<type 'generator'>

#类型验证
>>> from collections import Iterable, Iterator
>>> isinstance(generator_square, Iterator)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值