python迭代器对象及异常处理
内容概要
- 内置函数(可与匿名函数一起使用)
- 可迭代对象
- 迭代器对象
- for循环内部原理
- 异常处理
内容详细
一、内置函数
# 1、 map() 映射
l1 = [1, 3, 5, 7, 9]
res = map(lambda x:x**2, l1) # 返回一个迭代器对象,可循环取出元素
print(list(res)) # [1, 9, 25, 49, 81]
# 2、zip() 拉链
list1 = ['name', 'age', 'hobby']
list2 = ['elijah', 18, 'read']
# 把上面两个列表相同索引的元素组成列表套元组的形式:[('name','elijah'),(),()]
# for循环:
l = []
for i in range(len(list1)):
l.append((list1[i], list2[i]))
print(l)
# zip()函数
print(list(zip(list1, list2))) # [('name', 'elijah'), ('age', 18), ('hobby', 'read')]
'''而且就算两个列表中的元素个数不一致,使用这个函数也不会报错,会以最短的列表为准'''
'''zip(list1, list2, list3, list4)函数还可以接收多个列表'''
# 3、max() 和 min(), 找出数据集理的最大值和最小值
# 列表
list1 = [2, 4, 5, 6, 7, 8, 9, 33]
print(max(list1))
print(min(list1))
# 字典,比较的是字典的key值
dict1 = {
'jason': 30000,
'elijah': 500000,
'tony': 6000000,
'kevin': 10000000000
}
print(max(dict1)) # tony
print(min(dict1)) # elijah
# A-Z 65-90
# a-z 97-122
# 比较字典的values值, 在函数后面添加key=的值,用户匿名函数返回字典的value值
print(max(dict1, key=lambda key: dict1[key])) # kevin
print(min(dict1, key=lambda key: dict1[key])) # jason
# 4、filter() 过滤器
# filter(function or None, iterable) --> filter object
list1 = [2, 4, 5, 6, 7, 8, 9, 33]
print(list(filter(lambda x: x > 7, list1))) # [8, 9, 33]
# 5、reduce() 归总 functools模块里
# reduce(function, sequence, initial=None)
# reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates ((((1+2)+3)+4)+5)
from functools import reduce
list1 = [2, 4, 5, 6, 7, 8, 9, 33]
print(reduce(lambda x, y: x + y, list1)) # 74
res1 = reduce(lambda x, y: x + y, list1, 100) # 还可以额外添加元素值
二、可迭代对象
# 什么是迭代?
迭代即是更新换代,每一次更新换代都是基于上一次的结果形成的
# 可迭代对象由哪些?
内置方法中有"双下划iter"内置方法的就是可迭代对象 __iter__
# 内置方法
数据类型加"."就可以看到自带的内置方法,就是函数功能,有些是带双下划线的,读作"双下划+方法名",与面向对象名"__name(隐藏变量)"区分开
无__iter__内置方法的数据类型:
int、float
有__iter__内置方法的类型:
str,list,dict,tuple,set,file(文件类型)
字符串 列表 字典 元组 集合 文件对象
支持for循环取值
# 可迭代对象.__iter__ --> 可迭代对象会转变成迭代器对象,
# 会增加一个__next__内置方法,这个方法执行一次就取出一个可迭代对象里的值
str1 = 'elijah'
res = str1.__iter__()
print(res.__next__())
print(res.__next__())
print(res.__next__())
print(res.__next__())
print(res.__next__())
print(res.__next__())
# 取完元素之后再取会"报错"

三、迭代器对象
# 文件类型本身就自带__next__内置方法,是个迭代器对象,再使用__iter__()方法也还是个迭代器对象,不受影响
res = open('a.txt', 'w', encoding='utf8')
res.__iter__()
res.__next__()
'''
迭代器对象
即含有__iter__方法,又含有__next__方法
如何生成迭代器对象
让可迭代对象执行__iter__方法
迭代器对象无论执行多少次__iter__方法,还是迭代器对象
迭代器给我们提供了不依赖于索引取值的方式
'''
四、for 循环遍历取值原理
list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
res = list1.__iter__ # 把可迭代对象转变成迭代器对象
while True:
try:
print(res.__next__())
except Exception:
break
# 无限循环取出列表里面的值,当取完之后会报错,做异常处理
'''
for循环内部原理
1.将关键字in后面的数据先调用__iter__方法转为迭代器对象
2.循环执行__next__方法
3.取完之后__next__会报错,但是for循环会自动捕获该错误并处理
'''
五、异常处理
# 什么是异常?
当程序逻辑有错时,运行之后会报错,并停止运行,不再执行下面的代码
# 异常三个重要组成部分
1.traceback
翻到最下面从下往上的第一个蓝色字体鼠标左键点击即可跳转到错误的代码所在的行
2.XXXError
错误的类型
3.错误类型冒号后面的内容
错误的详细原因(很重要 仔细看完之后可能就会找到解决的方法)
# 错误的种类
1.语法错误
不被允许的 出现了应该立刻修改
2.逻辑错误
可以被允许的 出现了之后尽快修改即可 # 修改逻辑错误的过程其实就是在从头到尾理清思路的过程
# 异常处理:
把有可能出错的代码放进异常处理的代码里,出错时会接收错误信息并可返回,继续执行剩余的代码
try:
print(name)
int('abc')
except NameError as e:
print('变量名错误')
except ValueError as e:
print('值错误')
except Exception:
print('可以接收任何报错类型')
# 异常处理使用注意:
1、尽量只在有可能出错的代码段才使用
2、异常处理中的代码越少越好
3、异常处理的频率越低越好
python迭代器对象及异常处理的更多相关文章
- Python—day13 迭代器、迭代器对象、for循环对象、生成器、枚举对象
一.迭代器 1.迭代器概念: 器:包含了多个值的容器 迭代:循环反馈(一次从容器在取出一个值) 迭代器:从装有多个值的容器在一次取出一个值 ls=[3,5,7,1,9] 遍历:被遍历的对象必须是有序容 ...
- Python迭代器,可迭代对象,生成器
迭代器 迭代器(iterator)有时又称游标(cursor)是程式设计的软件设计模式,可在容器物件(container,例如链表或阵列)上遍访的界面,设计人员无需关心容器物件的内存分配的实现细节. ...
- Python中的可迭代对象与迭代器对象
刚刚学习Python,对“可迭代对象”和"迭代器对象"的个人理解,不知道对不对. 1.几个概念 (1)迭代工具:包括for循环.列表解析.in成员关系测试.....等等在内的,用于 ...
- Python 3.x自定义迭代器对象
Python 3.x与Python 2.x之间存在着较多的语法细节差异.今天在看Python核心编程的时候,说到了自定义迭代器对象.于是动手将源码打了一遍,原书代码如下: class AnyIter( ...
- 完全理解Python迭代对象、迭代器、生成器
在了解Python的数据结构时,容器(container).可迭代对象(iterable).迭代器(iterator).生成器(generator).列表/集合/字典推导式(list,set,dict ...
- 理解Python迭代对象、迭代器、生成器
作者:zhijun liu链接:https://zhuanlan.zhihu.com/p/24376869来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 本文源自RQ作 ...
- 完全理解 Python 迭代对象、迭代器、生成器(转)
完全理解 Python 迭代对象.迭代器.生成器 本文源自RQ作者的一篇博文,原文是Iterables vs. Iterators vs. Generators » nvie.com,俺写的这篇文章是 ...
- 完全理解 Python 迭代对象、迭代器、生成器
完全理解 Python 迭代对象.迭代器.生成器 2017/05/29 · 基础知识 · 9 评论 · 可迭代对象, 生成器, 迭代器 分享到: 原文出处: liuzhijun 本文源自RQ作者 ...
- [转载]完全理解Python迭代对象、迭代器、生成器
译文地址:liuzhijun 在了解Python的数据结构时,容器(container).可迭代对象(iterable).迭代器(iterator).生成器(generator).列表/集合/字典推导 ...
随机推荐
- c# - 关于位移符号 >> 和 << 的使用
1.前言 这是对二进制数据进行位移的方法 2.操作 using System; namespace ConsoleApp1.toValue { public class test1 { public ...
- Hadoop的Shuffle阶段
原文: https://www.toutiao.com/i6764683672772674062/ 在进入Map之前,首先会将数据从HDFS中读取,进行处理,按照字节偏移量这种之前说的形式处理为K,V ...
- Git 基础指令
Git 基础指令 Git 基础指令 获取 Git 仓库 在已存在目录中初始化仓库 克隆现有的仓库 记录仓库与仓库的更新 仓库的记录 检查当前文件状态 三部曲 跟踪新文件 提交更新 移除文件 推送到远程 ...
- Nginx虚拟主机、日志排错、模块配置
目录 Nginx虚拟主机 1. 基于多IP的方式 2. 基于多端口的方式 3. 基于多域名的方式 Nginx日志 Nginx配置文件配置项 Nginx模块 Nginx访问控制模块 Nginx状态监控模 ...
- 网络协议学习笔记(八)DNS协议和HttpDNS协议
概述 上一篇主要讲解了流媒体协议和p2p协议,现在我给大家讲解一下关于DNS和HttpDNS的相关知识. DNS协议:网络世界的地址簿 在网络世界,也是这样的.你肯定记得住网站的名称,但是很难记住网站 ...
- Android官方文档翻译 十一 2.4Overlaying the Action Bar
Overlaying the Action Bar 叠加菜单栏 This lesson teaches you to 这节课教给你: Enable Overlay Mode 启用叠加模式 For An ...
- 使用.NET 6开发TodoList应用(填坑1)——实现当前登录用户获取
系列导航及源代码 使用.NET 6开发TodoList应用文章索引 需求 在前面的文章里使用.NET 6开发TodoList应用(5)--领域实体创建,我们留了一个坑还没有填上,就是在数据库保存的时候 ...
- 【reverse】逆向6 JCC
[reverse]逆向6 JCC 前言 我们之前学习的时候讲了,eip寄存器存储的是当前(即将执行的语句的) 指向地址 而我们之前提到的下断点(F2),就和我们编程中的下断点一样,执行到某句汇编指令然 ...
- Linux深入探索04-Bash shell
----- 最近更新[2021-12-30]----- 本文目录结构预览: 一.简介 二.shell 变量 1.查看变量 2.变量类型 3.变量操作 4.系统常见的全局变量 三.shell 选项 1. ...
- linux单用户模式修改密码与系统启动级别
目录 一:系统启动级别 二:单用户模式修改密码 一:系统启动级别 系统启动级别: 0 关机 1 单用户模式(无法通过xshell方式使用)(虚拟机操作)(系统云服务商后台) 2 多用户无网络模式 3 ...