迭代器
迭代是Python最强大的功能之一,是访问集合元素的一种方式。 迭代器是一个可以记住遍历的位置的对象。 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。 迭代器有两个基本的方法:iter() 和 next()。 字符串,列表或元组对象都可用于创建迭代器:
>>> list=[1,2,3,4]
>>> it = iter(list) # 创建迭代器对象
>>> print (next(it)) # 输出迭代器的下一个元素
1
>>> print (next(it))
2
迭代器对象可以使用常规for语句进行遍历:
list=[1,2,3,4]
it = iter(list) # 创建迭代器对象
for x in it:
print (x, end=" ")
也可以使用 next() 函数:
import sys # 引入 sys 模块 list=[1,2,3,4]
it = iter(list) # 创建迭代器对象 while True:
try:
print (next(it))
except StopIteration:
sys.exit()
创建一个迭代器
把一个类作为一个迭代器使用需要在类中实现两个方法 __iter__() 与 __next__() 。
class MyNumbers:
def __iter__(self):
self.a = 1
return self def __next__(self):
x = self.a
self.a += 1
return x myclass = MyNumbers()
myiter = iter(myclass) print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))
StopIteration
StopIteration 异常用于标识迭代的完成,防止出现无限循环的情况,在 __next__() 方法中我们可以设置在完成指定循环次数后触发 StopIteration 异常来结束迭代。 在 20 次迭代后停止执行:
class MyNumbers:
def __iter__(self):
self.a = 1
return self def __next__(self):
if self.a <= 20:
x = self.a
self.a += 1
return x
else:
raise StopIteration myclass = MyNumbers()
myiter = iter(myclass) for x in myiter:
print(x)
生成器
在 Python 中,使用了 yield 的函数被称为生成器(generator)。 跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。 在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行 next() 方法时从当前位置继续运行。 调用一个生成器函数,返回的是一个迭代器对象。 以下实例使用 yield 实现斐波那契数列:
import sys def fibonacci(n): # 生成器函数 - 斐波那契
a, b, counter = 0, 1, 0
while True:
if (counter > n):
return
yield a
a, b = b, a + b
counter += 1
f = fibonacci(10) # f 是一个迭代器,由生成器返回生成 while True:
try:
print (next(f), end=" ")
except StopIteration:
sys.exit()

最新文章

  1. mapreduce中一个map多个输入路径
  2. ubuntu kylin 16.04系统的基本安装
  3. Java数组的一些基本算法
  4. 我们为什么需要DTO(数据传输对象)
  5. 存量数据处理结果查询.txt
  6. 基于HTML5 SVG炫酷文字爆炸特效
  7. Drupal 7.31版本爆严重SQL注入漏洞
  8. UVaLive 6627 First Date (转换时间)
  9. structs 源码示例
  10. linux apache添加多站点配置(Ubuntn和Centos)
  11. javascript 之执行环境-08
  12. [国嵌攻略][157][SPI总线介绍]
  13. windows下mysql-5.7.18安装
  14. iOS Block不能修改外部变量的值
  15. 2012 - AD FSMO操作主机角色 -- 作用
  16. centos7中安装mongodb3.6
  17. 【BZOJ3123】[Sdoi2013]森林 主席树+倍增LCA+启发式合并
  18. bzoj 4453 cys就是要拿英魂!——后缀数组+单调栈+set
  19. Oracle T4-2 使用ILOM CLI升级Firmware
  20. ora-28547:连接服务器失败,可能是 Oracle Net 管理失败

热门文章

  1. 干货 | 调用AI api 实现网页文字朗读
  2. JavaWeb中的高级知识总结
  3. springboot配置多个yml文件
  4. springboot打包,jar包可以以service方式启动
  5. 计量经济与时间序列_ACF自相关与PACF偏自相关算法解析(Python,TB(交易开拓者))
  6. GCC生成动态链接库(.so文件):-shared和-fPIC选项
  7. 解决DIV超出样式长度自动换行
  8. cifar数据集下载
  9. Oscar的拓扑笔记本
  10. Django与AJAX-choice字段-MTV和MVC模型-sweetalert搭建页面