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多线程
Nov 14 Python
python http接口自动化脚本详解
Jan 02 Python
pthon贪吃蛇游戏详细代码
Jan 27 Python
理想高通滤波实现Python opencv示例
Jan 30 Python
Tensorflow分类器项目自定义数据读入的实现
Feb 05 Python
利用python-pypcap抓取带VLAN标签的数据包方法
Jul 23 Python
Python3安装pip工具的详细步骤
Oct 14 Python
python 并发下载器实现方法示例
Nov 22 Python
Pycharm安装python库的方法
Nov 24 Python
详解python3 GUI刷屏器(附源码)
Feb 18 Python
pytorch 实现多个Dataloader同时训练
May 29 Python
Python 文字识别
May 11 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 数组入门教程小结
2009/05/20 PHP
PHP static局部静态变量和全局静态变量总结
2014/03/02 PHP
Symfony2实现在doctrine中内置数据的方法
2016/02/05 PHP
ajax调用返回php接口返回json数据的方法(必看篇)
2017/05/05 PHP
CI框架实现创建自定义类库的方法
2018/12/25 PHP
非常好的js代码
2006/06/27 Javascript
jquery cookie插件代码类
2009/05/26 Javascript
JavaScrip单线程引擎工作原理分析
2010/09/04 Javascript
window.location.hash 使用说明
2010/11/08 Javascript
鼠标右击事件代码(asp.net后台)
2011/01/27 Javascript
Javascript中字符串和数字的操作方法整理
2017/01/22 Javascript
在node中如何使用 ES6
2017/04/22 Javascript
nodejs入门教程四:URL相关模块用法分析
2017/04/24 NodeJs
在bootstrap中实现轮播图实例代码
2017/06/11 Javascript
手把手教你使用vue-cli脚手架(图文解析)
2017/11/08 Javascript
判断div滑动到底部的scroll实例代码
2017/11/15 Javascript
JS简单实现动态添加HTML标记的方法示例
2018/04/08 Javascript
在小程序中使用腾讯视频插件播放教程视频的方法
2018/07/10 Javascript
python中enumerate函数用法实例分析
2015/05/20 Python
Python 两个列表的差集、并集和交集实现代码
2016/09/21 Python
Python处理PDF及生成多层PDF实例代码
2017/04/24 Python
Python复数属性和方法运算操作示例
2017/07/21 Python
通过cmd进入python的实例操作
2019/06/26 Python
使用pandas实现筛选出指定列值所对应的行
2020/12/13 Python
Jmeter调用Python脚本实现参数互相传递的实现
2021/01/22 Python
全面总结使用CSS实现水平垂直居中效果的方法
2016/03/10 HTML / CSS
纯CSS3实现滚动的齿轮动画效果
2014/06/05 HTML / CSS
移动端HTML5 input常见问题(小结)
2020/09/28 HTML / CSS
玩具反斗城西班牙网上商城:ToysRUs西班牙
2017/01/19 全球购物
顶岗实习接收函
2014/01/09 职场文书
新学期标语
2014/06/30 职场文书
群众路线对照检查剖析材料
2014/10/09 职场文书
大学生个人年度总结范文
2015/02/15 职场文书
关于食品安全的演讲稿范文(三篇)
2019/10/21 职场文书
windows server2016安装oracle 11g的图文教程
2022/07/15 Servers
在ubuntu下安装go开发环境的全过程
2022/08/05 Golang