鱼C论坛

 找回密码
 立即注册
查看: 1717|回复: 0

[技术交流] 十一章节:迭代器

[复制链接]
发表于 2017-8-29 21:00:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 向西而笑 于 2017-8-29 21:06 编辑
                48课时:迭代器
迭代的意思:迭代是重复反馈过程的活动,其目的通常是为了逼近所需目标或结果。每一次对过程的重复称为一次“迭代”,而每一次迭代得到的结果会作为下一次迭代的初始值。


迭代器(iterator)
python在某个可迭代对象进行迭代操作时提供了两个BIF:iter()、next()。实现了next()功能的对象就叫做迭代器。
iter():返回一个迭代器,里面的参数可以一个可迭代对象。
next():返回迭代器中的下一个元素,如果里面的元素迭代完了则抛出一个StopIteration



例子:
  1. >>> example = (1,2,3)     #创建一个可迭代的对象
  2. >>> type(example)
  3. <class 'tuple'>                                
  4. >>> it = iter(example)                #调用iter()把it变成一个迭代器        
  5. >>> type(it)
  6. <class 'tuple_iterator'>                #用type()查看是一个iterator
  7. >>> next(it)                                #是迭代器就可以用next()函数
  8. 1
  9. >>> next(it)
  10. 2
  11. >>> next(it)
  12. 3
  13. >>> next(it)                #迭代器里的元素迭代完成就抛出了StopIterator
  14. Traceback (most recent call last):
  15.   File "<pyshell#14>", line 1, in <module>
  16.     next(it)
  17. StopIteration
复制代码

运用while、try except语句配合这两个方法就可以实现for循环:
  1. >>>example = 'FishC'
  2. >>> it = iter(example)
  3. >>> while True:
  4.         try:
  5.                 each = next(it)
  6.         except StopIteration:
  7.                 break
  8.         print(each)

  9.         
  10. F
  11. i
  12. s
  13. h
  14. C
复制代码


迭代器的魔法方法
名字和上面那两个是一样滴:__iter__()、__next__()。
功能也是一样的,一个容器里面都有这两个魔法方法。


小练习:斐波那契数列

  1. class Fibs:
  2.     def __init__(self,n):
  3.         self.a = 0
  4.         self.b = 1
  5.         self.n = n   #限制次数

  6.     def __iter__(self):
  7.         return self

  8.     def __next__(self):
  9.         self.a, self.b = self.b, self.a + self.b
  10.         if self.a>self.n:
  11.             raise StopIteration  #当超过限制则抛出StopIteration,否则会无限循环下去
  12.         return self.a


  13. fibs = Fibs(100)
  14. for i in fibs:
  15.     print
复制代码

运行结果:

  1. =========== RESTART: C:\Users\Administrator\Desktop\draft\test.py ===========
  2. 1
  3. 1
  4. 2
  5. 3
  6. 5
  7. 8
  8. 13
  9. 21
  10. 34
  11. 55
  12. 89
复制代码


评分

参与人数 1鱼币 +4 收起 理由
小甲鱼 + 4

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-19 06:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表