PYTHON-迭代器,xxx生成式
一 迭代器
1 什么是迭代器
#迭代器即迭代的工具,那什么是迭代呢?
#迭代是一个重复的过程,每次重复即一次迭代,并且每次迭代的结果都是下一次迭代的初始值
while True: #只是单纯地重复,因而不是迭代
print('===>') l=[1,2,3]
count=0
while count < len(l): #迭代
print(l[count])
count+=1 2 为何要用迭代器?
1.可以不依赖索引取值
2.同一时刻在内存中只有一个值,不会过多地占用内存 3 如何用迭代器?
可迭代的对象:但凡内置有__iter__方法的对象都是可迭代的对象,例如str,list,dict,tuple,set,文件 迭代器的对象:既内置有__iter__方法又内置有__next__方法的对象称之为迭代器对象,例如 文件 可迭代对象.__iter__() - ------》迭代器对象 迭代器对象.__iter__() - ------》迭代器本身
迭代器对象.__next__() - ------》迭代器的下一个值 for i in obj:
pass 4 for准确地说应该是迭代器循环,for循环的原理如下:
1. 先调用in后面那个值的__iter__方法,得到迭代器对象
2. 执行迭代器.__next__()方法得到一个返回值,然后赋值给一个变量k,运行循环体代码
3, 循环往复,直到迭代器取值完毕抛出异常然后捕捉异常自动结束循环 5 总结迭代器:
迭代器的优缺点
优点:
1.可以不依赖索引取值
2.同一时刻在内存中只有一个值,不会过多地占用内存(惰性计算,节省内存)
缺点:
1.不如按照索引或者key取值的方式灵活
2.无法预测迭代器所包含值的长度(只有在next完毕才知道到底有几个值) 可迭代的对象=====》迭代器对象:调用可迭代对象内置的__iter__方法会有一个返回值,
该返回值就是对应的迭代器对象
dic={'x':1,'y':2,'z':3}
迭代器对象 = 调用可迭代的对象
iter_dic=dic.__iter__()
# print(iter_dic)
res1=iter_dic.__next__()
print(res1) 三个不同的迭代器
iter_dic1=dic.__iter__()
iter_dic2=dic.__iter__()
iter_dic3=dic.__iter__() 二 生成器
1 什么是生成器
#只要函数内部包含有yield关键字,那么函数名()的到的结果就是生成器,并且不会执行函数内部代码 def func():
print('====>first')
yield 1
print('====>second')
yield 2
print('====>third')
yield 3
print('====>end') g=func()
print(g) #<generator object func at 0x0000000002184360> 2 生成器就是迭代器
g.__iter__
g.__next__
#2、所以生成器就是迭代器,因此可以这么取值
res=next(g)
print(res) 3 yield关键字:只能用在函数内 **
在函数内但凡包含有yield关键字,再去执行函数,就不会立刻运行函数体代码了
会得到一个返回值,该返回值成之为生成器对象,生成器本质就是迭代器 4 总结yield:
1. 提供一种自定义迭代器的解决方案
2. yield可用于返回值 yield VS return
相同点:都可以用于返回值
不同点:yield可以暂停函数,yield可以返回多次值,而return只能返回值一次值函数就立刻终止 三,三元表达式、列表推导式、生成器表达式
1 三元表达式
res = 条件成立情况下的返回值 if 条件 else 条件不成立情况下的返回值
name=input('姓名>>: ')
res='SB' if name == 'alex' else 'NB'
print(res) 2 列表生成式
[i
for i in range(10)]
[i for i in range(10) if i > 3] 3 生成器表达式 {}()
#1、把列表推导式的[]换成()就是生成器表达式 #2、示例:生一筐鸡蛋变成给你一只老母鸡,用的时候就下蛋,这也是生成器的特性
>>> chicken=('鸡蛋%s' %i for i in range(5))
>>> chicken
<generator object <genexpr> at 0x10143f200>
>>> next(chicken)
'鸡蛋0'
>>> list(chicken) #因chicken可迭代,因而可以转成列表
['鸡蛋1', '鸡蛋2', '鸡蛋3', '鸡蛋4',] #3、优点:省内存,一次只产生一个值在内存中 生成字典
{i:i for i in range(10) if i > 3}
生成集合
{i for i in range(10) if i > 3}
PYTHON-迭代器,xxx生成式的更多相关文章
- python函数:叠加装饰器、迭代器、自定义迭代器、生成式
一.叠加多个装饰器二.迭代器三.自定义迭代器四.xxx生成式 一.叠加多个装饰器 # 加载装饰器就是将原函数名偷梁换柱成了装饰器最内层那个wrapper函数 # 在加载完毕后,调用原函数其实就是在调用 ...
- 【转】Python之列表生成式、生成器、可迭代对象与迭代器
[转]Python之列表生成式.生成器.可迭代对象与迭代器 本节内容 语法糖的概念 列表生成式 生成器(Generator) 可迭代对象(Iterable) 迭代器(Iterator) Iterabl ...
- Python迭代器生成器与生成式
Python迭代器生成器与生成式 什么是迭代 迭代是重复反馈过程的活动,其目的通常是为了逼近所需目标或结果.每一次对过程的重复称为一次"迭代",而每一次迭代得到的结果会作为下一次迭 ...
- 一文搞懂Python迭代器和生成器
很多童鞋搞不懂python迭代器和生成器到底是什么?它们之间又有什么样的关系? 这篇文章就是要用最简单的方式让你理解Python迭代器和生成器! 1.迭代器和迭代过程 维基百科解释道: 在Python ...
- Python迭代器,可迭代对象,生成器
迭代器 迭代器(iterator)有时又称游标(cursor)是程式设计的软件设计模式,可在容器物件(container,例如链表或阵列)上遍访的界面,设计人员无需关心容器物件的内存分配的实现细节. ...
- python迭代器与iter()函数实例教程
python迭代器与iter()函数实例教程 发布时间:2014-07-16编辑:脚本学堂 本文介绍了python迭代器与iter()函数的用法,Python 的迭代无缝地支持序列对象,而且它还允许程 ...
- python基础——列表生成式
python基础——列表生成式 列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式. 举个例子,要生成list [1, 2, 3, 4 ...
- Python 迭代器和列表解析
Python 迭代器和列表解析 1)迭代器 一种特殊的数据结构,以对象形式存在 >>> i1 = l1.__iter__() >>> i1 = iter(l1) 可 ...
- Python迭代器,生成器--精华中的精华
1. 迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退,不过这也没什么,因为人们很少在迭代途中往后退.另外,迭代器的一大 ...
- Python 迭代器和生成器(转)
Python 迭代器和生成器 在Python中,很多对象都是可以通过for语句来直接遍历的,例如list.string.dict等等,这些对象都可以被称为可迭代对象.至于说哪些对象是可以被迭代访问的, ...
随机推荐
- 在windows上部署使用redis出现的问题及解决方法
在windows上部署使用Redis出现问题的解决方法 原文链接:https://www.cnblogs.com/herry52/p/5938902.html 下载Redis 在Redis的官网下载 ...
- banner轮播无缝滚动 jq代码
HTML: <div class="box"> <ul> <li>11111</li> <li>22222</li ...
- 超级牛皮的oracle的分析函数over(Partition by...) 及开窗函数
over(Partition by...) 一个超级牛皮的ORACLE特有函数. 天天都用ORACLE,用了快2年了.最近才接触到这个功能强大而灵活的函数.真实惭愧啊! oracle的分析函数over ...
- go 练习
1.判断 101-200 之间有多少个素数,并输出所有素数 定义:为在大于1的自然数中,除了1和它本身以外不再有其他因数的数称为质数. package main import ( "fmt& ...
- Java_myBatis_逆向工程
所谓逆向工程,就是根据数据库自动生成项目工程(包括了Interface.POJO.映射文件xml) 逆向工程包:https://github.com/wcyong/mybatisGeneratorCu ...
- VBScript进阶篇一
VBScript进阶篇一 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.编译型与解释型的区别 其实我们通过一张图就可以大致了解一下,他们运行机制. 想要了解更多,请 ...
- 函数和常用模块【day05】:生成器(四)
本节内容 1.概述 2.列表生成式 3.生成器 4.函数实现生成器 5.生成器表达式 一.概述 我们在使用一组数据时,通常情况下会定义一个列表,然后循环里面的元素,但是你想过没有,如果你只需要使用列表 ...
- lombok 工具类的介绍
lombok 是一个非常非常好用的工具类.打个比方,一个bean,需要字段,get set方法 无参有参构造器,重写equals和hashcode,字段一多很麻烦.它,就是来解决这个问题的.一个注解全 ...
- CodeForces - 907A Masha and Bears
A. Masha and Bears time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- 20155231 2016-2017-2 《Java程序设计》第6周学习总结
20155231 2016-2017-2 <Java程序设计>第6周学习总结 教材学习内容总结 学习目标 理解流与IO 理解InputStream/OutPutStream的继承架构 理解 ...