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}
转载于:https://www.cnblogs.com/du-jun/p/9767735.html
PYTHON-迭代器,xxx生成式相关推荐
- python迭代器生成器 学会再缩短一半开发效率 看看大牛是怎么写的
一.迭代 什么叫做迭代? 比如在 Java 中,我们通过 List 集合的下标来遍历 List 集合中的元素,在 Python 中,给定一个 list 或 tuple,我们可以通过 for 循环来遍历 ...
- python迭代器与生成器答案_史上最全 Python 迭代器与生成器
原标题:史上最全 Python 迭代器与生成器 作者:浪子燕青 链接:http://www.langzi.fun/迭代器与生成器.html 迭代器与可迭代对象 概念 迭代器:是访问数据集合内元素的一种 ...
- Python 迭代器和 C++ 迭代器,最大的不同竟然是......
作者 | 樱雨楼 责编 | 胡巍巍 前言 迭代器(Iterator)是 Python 以及其他各种编程语言中的一个非常常见且重要,但又充满着神秘感的概念.无论是 Python 的基础内置函数,还是各类 ...
- java 迭代器的hasnext,在Python迭代器中具有hasNext?
Python迭代器是否没有hasNext方法? 相关:我如何知道一开始发电机是否为空? 使用next(iterator, default_value)可以替代StopIteration. 例如: &g ...
- python 列表生成器放while_史上最全 Python 迭代器与生成器
原标题:史上最全 Python 迭代器与生成器 转自:浪子燕青 http://www.langzi.fun/迭代器与生成器.html 概念 迭代器:是访问数据集合内元素的一种方式,一般用来遍历数据,但 ...
- 简单介绍python迭代器和生成器
这篇文章主要介绍了Python中的迭代器和生成器,涉及到Python中很多重要的特性,需要的朋友可以参考下,希望能够给你带来帮助 python迭代器和生成器 1.迭代器 这里用字典示例 while T ...
- python迭代器使用_python迭代器的使用方法实例
什么是迭代器?迭代器是带有next方法的简单对象,当然也要实现__iter__函数.迭代器能在一序列的值上进行迭代,当没有可供迭代时,next方法就会引发StopIteration 的异常.pytho ...
- python生成器 图片分类_python批量处理图片图片Python迭代器和生成器介绍
Python迭代器和生成器介绍迭代器 迭代器是一个实现了迭代器协议的对象,Python中的迭代器协议就是有next方法的对象会前进到下一结果,而在一系列结果的末尾是,则会引发StopIteration ...
- [转载] python迭代器
参考链接: Python迭代器 迭代器 迭代器是一个可以记住遍历的位置的对象. 迭代器有两个基本的方法:iter() 和 next(). 使用对象内置的__iter__()方法生成迭代器 it = n ...
- python迭代器_Python迭代器
python迭代器 Good day learners! In our previous tutorial, we learned about Python Operator Overloading. ...
最新文章
- 多gpu训练梯度如何计算,求和是否要求平均
- 解决Android中No resource found that matches android:TextAppearance.Material.Widget.Button.Inverse问题
- python一千行入门代码-用Python三十行代码快速生成1000条随机评教内容
- python使用教程cmd啥意思-python中执行cmd的方式
- ECharts.js学习(三)
- 一晃居然已经停更半年了
- 计算机无法搜索本地文件,电脑本地磁盘无法搜索文件。怎么处理?
- OpenGL Subdivision Modes细分模式的实例
- 制作简单的WIFI干扰器
- day6_python之md5加密
- 2018(上)C高级第0次作业
- BZOJ1016 [JSOI2008]最小生成树计数
- Git常用指令——持续补充中
- 计算机科学与技术与数学建模,数学建模
- Mac OS X新手入门
- Spring AOP 之 通知、连接点、切点、切面
- 用IO流读取trs文件
- [leetcode]剑指offer(C++版题解)
- 常用贷款词汇英文名称
- xmind怎么导出甘特图_张兵导图:xmind如何绘制甘特图?