python之路之迭代器与生成器
一 迭代器
那么在研究迭代器之前首先应该要知道什么是迭代。
迭代:是一个重复的过程,并且每次重复都是建立基于上一次的结果而来的,所以在迭代的过程其实是在不断变化的。
迭代器:就是迭代取值的工具。
那么对于这个工具的使用,在python使用迭代的方法就是使用内置的——iter——,换言之就是说能够调用该方法的都叫可迭代的对象。
那么对于迭代器的优缺点:
优点就是:1 提供一种不依赖于索引的取之方式。
2 更加省内存,因迭代器运行时每次只取一个值,
缺点:取值麻烦,只能一个一个取,而且只能向后取,全部的值只能取一次,没办法用len获取长度。
迭代器对象:可迭代的对象执行--iter--方法得到的返回值即使迭代器对象。
迭代器对象一定是可迭代的对象,而可迭代的对象不一定是迭代器对象。
s='hello'
inter_s=s.__iter__()
while True:
try:
print(inter_s.__next__())
except StopIteration:
break
那么一般平时比较常用的列表,字典,元组,file等都是可迭代对象,那么其中有一个比较特殊的就是file,因file本身就是迭代器对象既能调用--itrer也能调用--next--, 调用iter时,结果还是它本身。 迭代器最典型的例子就是for循环: for line in l:那么for循环首先对l做一个调用--iter--的操作,拿到迭代器,然后再通过调用--next--拿到返回值,赋值给line. for循环自动检测stopiteration。在值取尽时,结束for循环。 二 生成器 函数内含有yield关键字,再调用函数就不会执行函数体代码,拿到的返回值就是一个生成器对象。
f=open('a.txt','r',)
f.__next__()
f.__iter__()
def chicken():
print('--------1')
yield
print('=======2')
yield
print('-----3')
yield
obj=chicken()
print(obj)
# print(obj.__next__())
print(obj.__iter__().__next__())#生成器的本质就是迭代器
print(obj.__iter__().__next__())
print(obj.__iter__().__next__())
生成器本质就是迭代器
def rang():
print('===')
n =
while True:
yield n
n+= obj=rang()
# print(obj)
print(obj.__next__())
print(obj.__next__())#第二次执行时会从yield开始,所以yield保持程序运行的状态。
print(obj.__next__())
# for item in obj:
# print(item)
生成一种迭代器,相当于for循环
def rang(start,stop,step):
n=start
while n<stop:
yield n
n+=step obj=rang(,,)
print(obj.__next__())
print(obj.__next__())
# for item in obj:
# print(item) 就相当于
for item in range(,,):
print(item)
总结生成器:
1 给我们提供一种自定义迭代器的方式,可以在函数内用yield关键字,调用函数拿到的结果就是一个生成器,生成器就是迭代器。
2 yield可以象return一样用于返回值,区别是return只能返回一次值,而yield可以返回多次,因程序遇见return就会结束,yield可以保存函数的一个执行状态。
协程函数:
#yield关键字的另外一种使用形式:表达式形式的yield
def eater(name):
print('%s 准备开始吃饭啦' %name)
food_list=[]
while True:
food=yield food_list
print('%s 吃了 %s' % (name,food))
food_list.append(food) g=eater('Feng')
g.send(None) #对于表达式形式的yield,在使用时,第一次必须传None,g.send(None)等同于next(g)
g.send('烤鸡')
g.send('烤鸭')
g.send('猴脑')
g.send('熊掌')
g.close()
g.send('鱼刺')
g.send('鲍鱼')
面向过程编程:
优点:将复杂流程化,进而简化。 缺点:修改一个阶段,可能其他阶段也要修改,所以容错率低,改进麻烦。
python之路之迭代器与生成器的更多相关文章
- 完全理解 Python 迭代对象、迭代器、生成器(转)
完全理解 Python 迭代对象.迭代器.生成器 本文源自RQ作者的一篇博文,原文是Iterables vs. Iterators vs. Generators » nvie.com,俺写的这篇文章是 ...
- 完全理解 Python 迭代对象、迭代器、生成器
完全理解 Python 迭代对象.迭代器.生成器 2017/05/29 · 基础知识 · 9 评论 · 可迭代对象, 生成器, 迭代器 分享到: 原文出处: liuzhijun 本文源自RQ作者 ...
- Python之模块,迭代器与生成器
本节涉及内容: 1. 迭代器和生成器 2. 递归 3. 字符串格式化 4. 模块 内置模块 自定义模块 第三方模块 5. 序列化的模块 json pickle (一). 迭代器和生成器: 迭代器: ...
- python学习笔记四 迭代器,生成器,装饰器(基础篇)
迭代器 __iter__方法返回一个迭代器,它是具有__next__方法的对象.在调用__next__方法时,迭代器会返回它的下一个值,若__next__方法调用迭代器 没有值返回,就会引发一个Sto ...
- 理解Python迭代对象、迭代器、生成器
作者:zhijun liu链接:https://zhuanlan.zhihu.com/p/24376869来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 本文源自RQ作 ...
- python基础篇_005_迭代器和生成器
Python迭代器和生成器 1.迭代器 迭代:可以将某个数据集内的数据“一个挨着一个的取出来” for i in range(1, 10, 2): # in 后面的对象必须是一个可迭代的 print( ...
- 【笔记】Python基础四:迭代器和生成器
一,迭代器协议和for循环工作机制 (一),迭代器协议 1,迭代器协议:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个stopiteration异常,以终止迭代(只能往 ...
- Python开发——函数【迭代器、生成器、三元表达式、列表解析】
递归和迭代 小明问路篇解释说明 递归:小明——>小红——>小于——>小东:小东——>小于——>小红——>小明 小明向小红问路,因小红不知道,所以向小于问路,因小于不 ...
- [转载]完全理解Python迭代对象、迭代器、生成器
译文地址:liuzhijun 在了解Python的数据结构时,容器(container).可迭代对象(iterable).迭代器(iterator).生成器(generator).列表/集合/字典推导 ...
随机推荐
- 对magento MVC框架的了解
对magento MVC框架的了解 在做二次开发以来,一直没有好好地去了解magento的MVC架构,以为跟其它的MVC架构一样,其实有着很大的区别. 有很多的程序框架都使用了现在最流行的MVC架构, ...
- google-protobuf安装详解
前言 编译调试项目的过程中涉及到caffe的编译,提示没有安装protobuf的错误,本文详解protobuf的安装: 问题描述 解决步骤 1.查看google protobuf的github,没有直 ...
- js 获取客户端mac地址
js 获取客户端mac地址 javascript获取客户端网卡MAC地址和IP地址和计算机名 nodesj如何获得客户端的mac地址呢? 浏览器获取MAC地址 不限浏览器的mac地址取得的几种办法 I ...
- easyui学习笔记10—手风琴格子始终展开和多个格子展开
始终打开有时候可能会很管用,其实就是一个设置问题.这里就不再介绍引用的资源了,这里只看看html是怎么写的. 1.html代码 <body> <h2>Basic Accordi ...
- Robot Framework 安装笔记
安装python 自行搜寻安装 安装pip 进入python目录下的Scripts文件夹下,cmd,执行easy_install.exe pip 安装pywin32 pip install pywin ...
- Balloons Colors
题目大意:ACMer总觉得题目难度与气球的颜色有关,比如最简单的题目颜色是红色,而最难的题目是黑色的.为了让这个谣言被打破,决定添加一个约束: 气球从1到N编号 题目从1到N编号 接下来给出 N X ...
- 《DSP using MATLAB》Problem 3.17
用差分方程两边进行z变换,再变量带换得到频率响应函数(或转移函数,即LTI系统脉冲响应的DTFT). 代码: %% ------------------------------------------ ...
- test20180907 day1
T1 256MB,1Sec T2 512MB,3Sec T3 512MB,1Sec 总分:150 试题一 餐馆 题目背景 铜企鹅是企鹅餐馆的老板,他正在计划如何使得自己本年度收益增加. 题目描述 共有 ...
- jsp servlet 进行基于js的用户验证
写这个只是完成使用js文件参数进行用户验证的处理的jsp 版,已经写过 asp.net php nodejs 以及纯js的,现在完善jsp的 使用的技术是比较简单的就是站点应用我们的js脚本,但是是带 ...
- 读写XML文档时,去掉新增加节点的“空命名空间”(xmlns=””)
在做对ReprotViewer编程时,想做一个用户可以更改显示/打印列的功能,大致看了下,只需要通过对rdlc文件中改变其<Hidden>节点值为false/true,即可实现对应某列的显 ...