python迭代器原理_python中的迭代器(以斐波那契数列为主讲解)

简要引入:

迭代一词,我们再熟悉不过了,它经常出现在算法中,在数学中也有很多的使用,比如一个算法经过多少次的迭代,执行的效率有了很大的提高……

迭代的意思类似于循环,每一次重复的过程被称为一次迭代的过程,而每一次迭代出现的结果将作为下一次迭代的初始值。

迭代器:提供迭代方法的容器。

如: 序列(列表、元祖、字符串),字典

练习1

#for循环来进行迭代

In [2]: for i in "Python":

...: print(i)

...:

P

y

t

h

o

n

注:字符串是一个容器,也是一个迭代器,for语句能使得迭代器的功能以输出到控制台的方式实现,每一次从此容器中依次取出一个数据,这就是迭代操作。(字典、文件同样支持迭代)

练习2

In [2]: dic1 = {'name':'xiaodong','sex':'male','love_language':'Python','love_quotes':'Life is short. You need Python.'}

In [3]: for dic in dic1:

...: print('%s ---- %s'%(dic, dic1[dic]))#%s字符串格式化的一种

...:

name ---- xiaodong

sex ---- male

love_language ---- Python

love_quotes ---- Life is short. You need Python.

python中关于迭代器的2个BIF(Built-in Functions,内置函数)

iter() -----调用iter()得到与之对应的迭代器

next() -----调用此方法,迭代器返回下一个值

StopIteration异常:迭代器没有值返回时,Python会抛出此异常,结束操作

练习3

In [4]: str1 = "Python"

In [5]: iter1 = iter(str1)

In [6]: next(iter1)

Out[6]: 'P'

In [7]: next(iter1)

Out[7]: 'y'

In [8]: next(iter1)

Out[8]: 't'

In [9]: next(iter1)

Out[9]: 'h'

In [10]: next(iter1)

Out[10]: 'o'

In [11]: next(iter1)

Out[11]: 'n'

#最后抛出异常结束如下所示:

In [12]: next(iter1)

---------------------------------------------------------------------------

StopIteration Traceback (most recent call last)

in ()

----> 1 next(iter1)

StopIteration:

原理如下:

In [13]: str1 = "Python"

In [14]: iter1 = iter(str1)

In [15]: while True:

...: try:

...: each = next(iter1)

...: except StopIteration:

...: break

...: print(each)

...:

P

y

t

h

o

n

方法实现

__iter()__

__next()__

迭代器必须实现__iter__()的方法,因为通过此方法才能返回迭代器本身。除此之外,还需要重写__next__()方法,用此方法可以使得迭代器按照我们自己定义的规则进行迭代。

斐波那契数列

In [1]: class Fibonacci:

...: def __init__(self,n = 10):#n=10是一个范围

...: self.a = 0

...: self.b = 1

...: self.n = n

...: def __iter__(self): #返回迭代器本身

...: return self

...: def __next__(self):

...: self.a, self.b = self.b, self.a + self.b

...: if self.a > self.n: #判断是否还有下一个输出,如果没有则抛出异常

...: raise StopIteration

...: return self.a

In [2]: fibonaccis = Fibonacci()#类的实例化

In [3]: for fibonacci in fibonaccis: #迭代生成此数列

...: print(fibonacci,end=' ') #end=' '可以理解为循环打印时不换行,以空格分开

...:

1 1 2 3 5 8

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值