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三级目录展示的实现方法
Sep 28 Python
利用Python批量压缩png方法实例(支持过滤个别文件与文件夹)
Jul 30 Python
TF-IDF算法解析与Python实现方法详解
Nov 16 Python
Python使用random.shuffle()打乱列表顺序的方法
Nov 08 Python
pyqt5让图片自适应QLabel大小上以及移除已显示的图片方法
Jun 21 Python
在pycharm中配置Anaconda以及pip源配置详解
Sep 09 Python
Django中自定义查询对象的具体使用
Oct 13 Python
Python单元测试与测试用例简析
Nov 09 Python
Python使用pyexecjs代码案例解析
Jul 13 Python
使用Python pip怎么升级pip
Aug 11 Python
python 多线程爬取壁纸网站的示例
Feb 20 Python
python 算法题——快乐数的多种解法
May 27 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
实用函数10
2007/11/08 PHP
php数组函数序列之array_unshift() 在数组开头插入一个或多个元素
2011/11/07 PHP
使用jQuery清空file文件域的解决方案
2013/04/12 Javascript
探讨在JQuery和Js中,如何让ajax执行完后再继续往下执行
2013/07/09 Javascript
Javascript保存网页为图片借助于html2canvas库实现
2014/09/05 Javascript
使用jquery清空、复位整个输入域
2015/04/02 Javascript
如何使用HTML5地理位置定位功能
2015/04/27 Javascript
JavaScript 拖拽实例代码
2016/09/21 Javascript
微信小程序 ES6Promise.all批量上传文件实现代码
2017/04/14 Javascript
Javascript实现时间倒计时效果
2017/07/15 Javascript
Django+Vue.js搭建前后端分离项目的示例
2017/08/07 Javascript
Bootstrap table使用方法记录
2017/08/23 Javascript
vue框架搭建之axios使用教程
2018/07/11 Javascript
js使用formData实现批量上传
2020/03/27 Javascript
详解JavaScript中关于this指向的4种情况
2019/04/18 Javascript
js 将线性数据转为树形的示例代码
2019/05/28 Javascript
使用vuex存储用户信息到localStorage的实例
2019/11/11 Javascript
通过实例了解Javascript柯里化流程
2020/03/03 Javascript
微信小程序连续签到7天积分获得功能的示例代码
2020/08/20 Javascript
react ant Design手动设置表单的值操作
2020/10/31 Javascript
[02:52]2017DOTA2国际邀请赛中国区预选赛晋级之路
2017/07/03 DOTA
python读取文件名并改名字的实例
2019/01/07 Python
Python Pillow.Image 图像保存和参数选择方式
2020/01/09 Python
用纯CSS3实现网页中常见的小箭头
2017/10/16 HTML / CSS
豆腐の盛田屋官网:日本自然派的豆乳面膜、肥皂、化妆水、乳液等
2016/10/08 全球购物
Lookfantastic俄罗斯:欧洲在线化妆品零售商
2019/08/06 全球购物
西班牙Polo衫品牌:Polo Club
2020/08/09 全球购物
医学类导师推荐信范文
2013/11/19 职场文书
体育运动口号
2014/06/09 职场文书
培训科主任岗位职责
2014/08/08 职场文书
思想作风整顿个人剖析材料
2014/10/06 职场文书
2015年老干部工作总结
2015/04/23 职场文书
python基础之while循环语句的使用
2021/04/20 Python
pytorch中的torch.nn.Conv2d()函数图文详解
2022/02/28 Python
mysql使用FIND_IN_SET和group_concat两个方法查询上下级机构
2022/04/20 MySQL
html中相对位置与绝对位置的具体使用
2022/05/15 HTML / CSS