Python迭代器&生成器

本文介绍了Python中的可迭代对象、迭代器和生成器。可迭代对象是可以通过迭代器遍历的对象,如list、dict等。迭代器是带有状态的对象,通过next()方法返回容器中的下一个值。生成器是一种特殊的迭代器,使用yield关键字,实现懒加载模式,减少内存占用。文章还通过斐波那契数列的例子展示了如何创建和使用生成器,以及生成器在大文件读取中的优势。
摘要由CSDN通过智能技术生成

可迭代对象

如果给定一个listtuple,我们可以通过for循环来遍历这个listtuple,这种遍历我们称为迭代(Iteration)。

很多容器都是可迭代对象,此外还有更多的对象同样也是可迭代对象,比如处于打开状态的filessockets等等。但凡是可以返回一个 迭代器 的对象都可称之为可迭代对象,听起来可能有点困惑,没关系,可迭代对象与迭代器有一个非常重要的区别。先看一个例子:

这里 x 是一个可迭代对象,可迭代对象和容器一样是一种通俗的叫法,并不是指某种具体的数据类型,list是可迭代对象,dict是可迭代对象,set也是可迭代对象。 y 和 z 是两个独立的迭代器,迭代器内部持有一个状态,该状态用于记录当前迭代所在的位置,以方便下次迭代的时候获取正确的元素。迭代器有一种具体的迭代器类型,比如 list_iterator , set_iterator 。可迭代对象实现了 iternext 方法(python2中是 next 方法,python3是 next 方法),这两个方法对应内置函数 iter() 和 next() 。 iter 方法返回可迭代对象本身,这使得他既是一个可迭代对象同时也是一个迭代器。

迭代器

那么什么迭代器呢?它是一个带状态的对象,他能在你调用 next() 方法的时候返回容器中的下一个值,任何实现了 next() (python2中实现 next() )方法的对象都是迭代器,至于它是如何实现的这并不重要。

现在我们就以斐波那契数列为例,学习为何创建以及如何创建一个迭代器:

著名的斐波拉契数列(Fibonacci),除第一个和第二个数外,任意一个数都可由前两个数相加得到:

1, 1, 2, 3, 5, 8, 13, 21, 34, …

def fab(max): 
    n, a, b = 0, 0, 1 
    while n < max: 
        print b 
        a, b = b, a + b 
        n = n + 1

直接在函数fab(max)中用print打印会导致函数的可复用性变差,因为fab返回None。其他函数无法获得fab函数返回的数列。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值