内容概要

  • 内置函数(可与匿名函数一起使用)
  • 可迭代对象
  • 迭代器对象
  • 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迭代器对象及异常处理的更多相关文章

  1. Python—day13 迭代器、迭代器对象、for循环对象、生成器、枚举对象

    一.迭代器 1.迭代器概念: 器:包含了多个值的容器 迭代:循环反馈(一次从容器在取出一个值) 迭代器:从装有多个值的容器在一次取出一个值 ls=[3,5,7,1,9] 遍历:被遍历的对象必须是有序容 ...

  2. Python迭代器,可迭代对象,生成器

    迭代器 迭代器(iterator)有时又称游标(cursor)是程式设计的软件设计模式,可在容器物件(container,例如链表或阵列)上遍访的界面,设计人员无需关心容器物件的内存分配的实现细节. ...

  3. Python中的可迭代对象与迭代器对象

    刚刚学习Python,对“可迭代对象”和"迭代器对象"的个人理解,不知道对不对. 1.几个概念 (1)迭代工具:包括for循环.列表解析.in成员关系测试.....等等在内的,用于 ...

  4. Python 3.x自定义迭代器对象

    Python 3.x与Python 2.x之间存在着较多的语法细节差异.今天在看Python核心编程的时候,说到了自定义迭代器对象.于是动手将源码打了一遍,原书代码如下: class AnyIter( ...

  5. 完全理解Python迭代对象、迭代器、生成器

    在了解Python的数据结构时,容器(container).可迭代对象(iterable).迭代器(iterator).生成器(generator).列表/集合/字典推导式(list,set,dict ...

  6. 理解Python迭代对象、迭代器、生成器

    作者:zhijun liu链接:https://zhuanlan.zhihu.com/p/24376869来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 本文源自RQ作 ...

  7. 完全理解 Python 迭代对象、迭代器、生成器(转)

    完全理解 Python 迭代对象.迭代器.生成器 本文源自RQ作者的一篇博文,原文是Iterables vs. Iterators vs. Generators » nvie.com,俺写的这篇文章是 ...

  8. 完全理解 Python 迭代对象、迭代器、生成器

    完全理解 Python 迭代对象.迭代器.生成器 2017/05/29 · 基础知识 · 9 评论 · 可迭代对象, 生成器, 迭代器 分享到: 原文出处: liuzhijun    本文源自RQ作者 ...

  9. [转载]完全理解Python迭代对象、迭代器、生成器

    译文地址:liuzhijun 在了解Python的数据结构时,容器(container).可迭代对象(iterable).迭代器(iterator).生成器(generator).列表/集合/字典推导 ...

随机推荐

  1. linux -安装mysql,配置密码,开启远程访问

    1.安装 下载yum源的安装包 yum install https://repo.mysql.com//mysql80-community-release-el7-1.noarch.rpm 安装 yu ...

  2. 实验 5 :OpenFlow 协议分析和 OpenDaylight 安装

    实验 5 :OpenFlow 协议分析和 OpenDaylight 安装 一.实验目的 回顾 JDK 安装配置,了解 OpenDaylight 控制的安装,以及 Mininet 如何连接: 通过抓包获 ...

  3. 第10组 Alpha冲刺 (4/6)(组长)

    1.1基本情况 ·队名:今晚不睡觉 ·组长博客:https://www.cnblogs.com/cpandbb/p/13982696.html ·作业博客:https://edu.cnblogs.co ...

  4. 使用.NET 6开发TodoList应用(29)——实现静态字符串本地化功能

    系列导航及源代码 使用.NET 6开发TodoList应用文章索引 需求 在开发一些需要支持多种语言的应用程序时,我们需要根据切换的语言来对应展示一些静态的字符串字段,在本文中我们暂时不去讨论如何结合 ...

  5. GeoServer介绍

    GeoServer本质上是一个地图服务器,它是遵循OpenGIS Web 服务器规范的J2EE实现,通过它可以方便的将地图数据发布为地图服务,实现地理空间数据在用户之间的共享.另外,它也提供了相应的接 ...

  6. leetcode 24. 两两交换链表中的节点 及 25. K 个一组翻转链表

    24. 两两交换链表中的节点 问题描述 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. 示例: 给定 1->2-> ...

  7. CUDA 入门(转)

    CUDA(Compute Unified Device Architecture)的中文全称为计算统一设备架构.做图像视觉领域的同学多多少少都会接触到CUDA,毕竟要做性能速度优化,CUDA是个很重要 ...

  8. 开发者的瑞士军刀「GitHub 热点速览 v.22.04」

    Swiss Army knife 可以说是本周的关键词了,多个项目采用该词来描述它的特性:像是能全方位解决浏览器"网络"操作的 CyberChef 方便你进行数据加密.解编码,还有 ...

  9. /etc/passwd详解

    root:x:0:0:root:/root:/bin/bash  bin:x:1:1:bin:/bin:/sbin/nologin  daemon:x:2:2:daemon:/sbin:/sbin/n ...

  10. 简单socket服务器编程

    package socket; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; ...