Python迭代器和生成器定义与用法示例


Posted in Python onFebruary 10, 2018

本文实例讲述了Python迭代器和生成器定义与用法。分享给大家供大家参考,具体如下:

迭代器 iter()

迭代器是访问集合中元素的一种方式,迭代器 object 从集合中的第一个元素开始访问,直到所有的元素被访问完成.

所以迭代器的特点是:只能往前,不能后退

迭代器的优点:不需要提前准备整个迭代器中的所有元素,仅仅迭代到某个元素时才计算该元素,而之前或者之后,元素可以不存在或者销毁.因为这个特点,迭代器特别适合遍历文件比较大或者无限的集合.

总结下迭代器 iter()的特点吧:

1.访问者不需要关心迭代器内部的结构,仅需通过next()方法不断去取下一个内容
2.不能随机访问集合中的某个值 ,只能从头到尾依次访问
3.访问到一半时不能往回退
4.便于循环比较大的数据集合,节省内存

**迭代器是用__next__()来取值的,来看个例子吧:

li=[1,2,3,4,56,78]
a=iter(li)
print(a.__next__())
print(a.__next__())
print(a.__next__())
print(a.__next__())
print(a.__next__())
print(a.__next__()) #取值到最后一个元素787
print(a.__next__())

输出:

1
2
3
4
56
78
#开始报错
Traceback (most recent call last):
 File "/Users/shane/PycharmProjects/Py_study/Base/S5/iter_test.py", line 14, in <module>
  print(a.__next__())
StopIteration

生成器generator

一个函数调用时返回一个迭代器,那这个函数就叫做生成器(generator);如果函数中包含yield语法,那这个函数就会变成生成器

yield是个什么鬼?yield 其实和函数中的 return 一样,一样的是都会返回定义好的值,但不同的是,return 是退出函数,yield 只是暂停函数执行,等待下一次迭代器取值

我们来看个例子:

def func():
  print(111)
  yield 1
  print(222)
  yield 2
  print(333)
  yield 3
ret=func()
r1=ret.__next__()
print(r1) #如果没有 print,只会返回111

out:

111
1

一个典型的生成器的取值方式:

def func():
  print(111)
  yield 1
  print(222)
  yield 2
  print(333)
  yield 3
ret=func()
r1=ret.__next__()
print(r1)
r2=ret.__next__()
print(r2)
r3=ret.__next__()
print(r3)
r4=ret.__next__()  #如果没有 r4就不会报错,因为已经没值可取了
print(r4)

out:

Traceback (most recent call last):
 File "/Users/shane/PycharmProjects/Py_study/Base/S5/geno.py", line 21, in <module>
  r4=ret.__next__()
StopIteration
111
1
222
2
333
3

进程已结束,退出代码1

来看一个比较完整一点的生成器和迭代器吧:

def myrange(args):
  start=0
  while True:
    if start > args:
      return
    else:
      yield start
      start+=1
res=myrange(3)
ret=res.__next__()
print(ret)
ret=res.__next__()
print(ret)
ret=res.__next__()
print(ret)
ret=res.__next__()
print(ret)
ret=res.__next__()
print(ret)

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python网络编程之UDP通信实例(含服务器端、客户端、UDP广播例子)
Apr 25 Python
Python批量创建迅雷任务及创建多个文件
Feb 13 Python
Python使用SQLite和Excel操作进行数据分析
Jan 20 Python
python 删除非空文件夹的实例
Apr 26 Python
Python第三方Window模块文件的几种安装方法
Nov 22 Python
使用django实现一个代码发布系统
Jul 18 Python
pyinstaller打包程序exe踩过的坑
Nov 19 Python
python使用pygame实现笑脸乒乓球弹珠球游戏
Nov 25 Python
浅谈django 重载str 方法
May 19 Python
Python 如何调试程序崩溃错误
Aug 03 Python
matplotlib画混淆矩阵与正确率曲线的实例代码
Jun 01 Python
如何Python使用re模块实现okenizer
Apr 30 Python
Python中装饰器学习总结
Feb 10 #Python
Python基于hashlib模块的文件MD5一致性加密验证示例
Feb 10 #Python
Python中生成器和迭代器的区别详解
Feb 10 #Python
详解python中的线程
Feb 10 #Python
Odoo中如何生成唯一不重复的序列号详解
Feb 10 #Python
python TCP Socket的粘包和分包的处理详解
Feb 09 #Python
python实现Adapter模式实例代码
Feb 09 #Python
You might like
php使用socket调用http和smtp协议实例小结
2019/07/26 PHP
写自已的js类库需要的核心代码
2012/07/16 Javascript
js控制的遮罩层实例介绍
2013/05/29 Javascript
JS阻止冒泡事件以及默认事件发生的简单方法
2014/01/17 Javascript
jquery引用方法时传递参数原理分析
2014/10/13 Javascript
轻松创建nodejs服务器(7):阻塞操作的实现
2014/12/18 NodeJs
Javascript基础教程之if条件语句
2015/01/18 Javascript
JS实现浏览器状态栏文字闪烁效果的方法
2015/10/27 Javascript
Bootstrap基本组件学习笔记之按钮组(8)
2016/12/07 Javascript
ES6学习之变量的解构赋值
2017/02/12 Javascript
jquery获取链接地址和跳转详解(推荐)
2017/08/15 jQuery
Express之托管静态文件的方法
2018/06/01 Javascript
Vue获取页面元素的相对位置的方法示例
2020/02/05 Javascript
jquery css实现流程进度条
2020/03/26 jQuery
[00:14]护身甲盾
2019/03/06 DOTA
Python实现求最大公约数及判断素数的方法
2015/05/26 Python
在Windows系统上搭建Nginx+Python+MySQL环境的教程
2015/12/25 Python
轻松理解Python 中的 descriptor
2017/09/15 Python
python中如何使用正则表达式的非贪婪模式示例
2017/10/09 Python
Python3.5 Pandas模块之DataFrame用法实例分析
2019/04/23 Python
python flask web服务实现更换默认端口和IP的方法
2019/07/26 Python
python实现图书馆抢座(自动预约)功能的示例代码
2020/09/29 Python
Flask处理Web表单的实现方法
2021/01/31 Python
css3实现文字首尾衔接跑马灯的示例代码
2020/10/16 HTML / CSS
Top Villas美国:豪华别墅出租和度假屋
2018/07/10 全球购物
Chantelle仙黛尔内衣美国官网:法国第一品牌内衣
2018/07/26 全球购物
马德里运动鞋商店:Nigra Mercato
2020/02/16 全球购物
opencv实现图像几何变换
2021/03/24 Python
测绘工程系学生的自我评价
2013/11/30 职场文书
心理健康心得体会
2014/01/02 职场文书
2014年学校领导班子对照检查材料
2014/09/19 职场文书
2014年房产销售工作总结
2014/12/08 职场文书
公司给客户的感谢信
2015/01/23 职场文书
汽车销售员岗位职责
2015/04/11 职场文书
农民工工资支付承诺书
2015/05/04 职场文书
2016年教师学习廉政准则心得体会
2016/01/20 职场文书