python学习10—迭代器、三元表达式与生成器
python学习10—迭代器、三元表达式与生成器
1. 迭代器协议
定义:对象必须提供一个next方法,执行该方法或者返回迭代中的下一项,或者返回一个StopIteration异常,以终止迭代(只能往后走不能往前退)
2. 可迭代对象
实现了迭代器协议的对象,对象内部定义一个__iter__()方法
3. for循环实现机制
字符串、列表,元组,字典,集合,文件等都不具有next方法,所以他们都不是可迭代对象(iterable object),但是为什么for循环可以进行呢?
原因:for循环首先调用了他们的内置方法__iter()__方法将其转换为可迭代对象,然后再调用这个转换后的可迭代对象的__next()__方法,进行迭代。
l = [1,2,3]
# iterable object
iter_l = l.__iter__()
print(iter_l.__next__())
字符串、列表、元组为有序序列,也可以通过索引取值,但是字典、集合、文件等非序列类型,不可以通过索引取值,所以出现了for循环,一个基于迭代器协议的统一的遍历方式。
4. 使用while循环实现for循环机制
l = [1,2,3]
detail_l=l.__iter__()
while True:
try:
print(detail_l.__next__())
except StopIteration:
print('end of iteration')
break
5. next()函数
python内置函数next()调用对象的__next()__方法,实现机制与__next()__相同。
l = [1,2,3,5,6] l_iter = l.__iter__() print(l_iter.__next__()) #两行print()代码效果相同 print(next(l_iter))
6. 三元表达式
如下代码,如果name == 'b'则返回a,如果name不等于'b'则返回c。
name = 'b'
result = 'a' if name == 'b' else 'c'
相当于c++中的条件运算符(三目运算符)“?:”,都是对一个条件进行判断,满足条件与否分别返回一个值。
#include<iostream>
using namespace std;
int main()
{
int a = ;
int b = ;
int c = a>b ? a : b;
return ;
}
7. 列表解析
利用三元表达式可以进行列表解析。
egg = ['egg %s' %i for i in range(10) if i > 2]
返回:
>>> ['egg 3', 'egg 4', 'egg 5', 'egg 6', 'egg 7', 'egg 8', 'egg 9']
8. 生成器
生成器作为一种数据类型,自动实现了迭代器协议,即可以直接调用生成器的__next__()方法,生成器就是可迭代对象。
8.1 生成器函数
生成器函数使用yield代替return,且可返回多个值,每次调用返回一个值。
def f():
yield 1
yield 2
yield 3
yield 4
yield 5 iter_f = f()
print(iter_f.__next__())
print(iter_f.__next__())
print(iter_f.__next__())
8.2 生成器表达式
将列表解析的[]替换为()即可获得生成器表达式。
egger = ('egg %s' %i for i in range(10) if i > 2)
print(egger)
print(egger.__next__())
print(egger.__next__())
print(egger.__next__())
很多python内置函数如sum(),map(),reduce(),filter()等都是遵循迭代器协议的,故可利用生成器进行一些高级的操作。
sum(x**2 for x in range(10))
注意:生成器只能遍历一次,遍历之后,生成器被释放。
python学习10—迭代器、三元表达式与生成器的更多相关文章
- python之旅:三元表达式、列表推导式、生成器表达式、函数递归、匿名函数、内置函数
三元表达式 #以下是比较大小,并返回值 def max2(x,y): if x > y: return x else: return y res=max2(10,11) print(res) # ...
- Python(迭代、三元表达式、列表生成、生成器、迭代器)
迭代 什么是迭代 1 重复 2 下次重复一定是基于上一次的结果而来 如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration). ...
- python学习-38迭代器和生成器
迭代器和生成器 ---- 迭代器协议和for循环工作机制 1.迭代器协议:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么引起一个Stoplteration异常,以终止迭代(只能往 ...
- Python学习 :迭代器&生成器
列表生成式 列表生成式的操作顺序: 1.先依次来读取元素 for x 2.对元素进行操作 x*x 3.赋予变量 Eg.列表生成式方式一 a = [x*x for x in range(10)] pri ...
- python学习日记(迭代器、生成器)-乱七八糟
迭代器 迭代是Python最强大的功能之一,是访问集合元素的一种方式. 迭代器是一个可以记住遍历的位置的对象. 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退 ...
- Python学习之迭代器和生成器
那么首先什么是迭代器和生成器呢? 迭代器即迭代的工具,那么什么又是迭代呢?所谓迭代:迭代是一个重复的过程,每次重读即一次迭代,并且每次迭代的结果都是下一次迭代的初始值.例: l=[1,2,3] cou ...
- python:列表生成式和三元表达式、匿名函数
一.列表生成式 1.列表生成式就是python内置的一种用来生成list的生成式. 比如下面这个例子: l=[] for i in range(10) list.append(i) 生成一个列表要用循 ...
- day19-1 迭代器,三元表达式,列表推导式,字典生成式,
目录 迭代器 可迭代对象 迭代器对象 总结 三元表达式(三目表达式) 列表推导式 字典生成式 迭代器 可迭代对象 拥有iter方法的对象就是可迭代对象 # 以下都是可迭代的对象 st = '123'. ...
- python学习道路(day5note)(列表生成式,生成器,装饰器,常用模块)
生成列表的方式 data = [1,2,3] 需求 每个数字加上1 # data = ( x*2 for x in range(5)) print(data) 列表生成式 后面的I赋予加1操 ...
随机推荐
- shell脚本之nginx的安装
为了编写nginx自动部署的脚本而刚学习的shell脚本语言.写文章只是为了记录,有错误勿喷. 一.创建shell脚本程序 操作系统是Linux的 CentOS 7 版本. ...
- ROW_NUMBER() over(order by ID desc ) as RowNumber 返回类型问题
因为ID是int类型,所以ROW_NUMBER() over(order by ID desc ) as RowNumber 想当然的认为是Int类型 实际ROW_NUMBER() over(orde ...
- python-并发编程之进程
进程 python中创建进程模块为:multiprocessing 开销非常大 是计算机中资源分配的最小单位(内存隔离) 能利用多个CPU 由操作系统控制 同时操作内存之外的数据会产生数据的不安全 进 ...
- this与super的语法比较
this 代表当前对象 可以代表当前属性,当前方法,当前对象(整个自己). 作用:解决同名变量的同名问题,同明变量可能来源于父类,局部变量和成员变量... 语法使用:this( 实参... ); 调用 ...
- 关于pandas
axis轴,axis=0为逐行,axis=1为逐列
- 递归,装饰器,python常用内置方法
**递归** def calc(n): print(n) if int(n / 2) == 0: 条件判断 r ...
- JS中的迭代(数组)
啥子是迭代?可以简单地理解为按顺序访问目标(数组.对象等)中的每一项(其实和遍历概念没什么差别) 数组的迭代被我分为两种: 查找 遍历 查找: 1.indexOf(item,start) 该方法搜索指 ...
- teb教程9
通过costmap_converter来跟踪和包含动态障碍物 简介:利用costmap_converter来很容易跟踪动态障碍物 1.costmap_converter中提供了一个插件称之为costm ...
- word2vec 原理浅析 及高效训练方法
1. https://www.cnblogs.com/cymx66688/p/11185824.html (word2vec中的CBOW 和skip-gram 模型 浅析) 2. https://ww ...
- 基于Libpcap实现一个网络数据包嗅探器
基本功能就是来捕获所有流经本网卡的数据包. 实现流程: 查找网络设备 打开网络设备 查找设备信息 输入过滤规则 编译输入规则 设置输入规则 开始捕获数据包 调用数据包分析模块 输出MAC,IP,协议以 ...