内容概要

  • 内置函数(可与匿名函数一起使用)
  • 可迭代对象
  • 迭代器对象
  • 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. WAFW00F waf识别工具 源码学习

    我实习工作的第一个任务根据已有的java waf识别工具 实现了一个python的waf识别工具 代码结构非常乱 仅仅达到了能用的水平. 顶头svp推荐这个项目当时我已经写好了开始用了自己的 稍微看了 ...

  2. 利用quake捡洞

    quake一开漏洞全靠捡 定位资产 通过主域名定位子域名资产 domain:"target.com" 通过C段定位资产 ip: "1.1.1.1/24" 通过证 ...

  3. 从AAB文件生成APK文件

    开头先说方法 1.下载 bundletool 2.开始生成 java -jar bundletool.jar build-apks --bundle=[aab文件路径(例如:C:\Users\Admi ...

  4. spring 事务传播性

    一.什么是事务传播性 大白话讲就是,方法之间互相调用的时候,事务如何传播,比如A()调用B(),B()的事务是和A()共用一个事务(失败一起提交)? 还是新事务(两者事务互不影响)?,还是说B()不需 ...

  5. 【记录一个问题】在goland中的_test.go文件中,点右键点run,无法执行测试用例

    比较奇怪的是: 在命令行下,用 test -v alloc_test.go -test.run TestAlloc_utilJoinCPUAndGpu alloc.go 可以执行测试用例 比较奇怪的是 ...

  6. 【转载】ASP.NET 内联代码、内联表达式、数据绑定表达式使用方法罗列(形式就是常说的尖括号 百分号 等于号 井号)

    ASP.NET 内联代码.内联表达式.数据绑定表达式使用方法罗列(形式就是常说的尖括号 百分号 等于号 井号) 今天在做渭南电脑维修网的一个小功能时遇到了一些问题,因此特别列出,以备他日之用. 首先对 ...

  7. golang中函数的参数

    1. 函数当做函数的参数 package main import "fmt" type HandleFunc func(int) (int, bool) func add10(nu ...

  8. gin中multipart/urlencoded表单

    package main import ( "github.com/gin-gonic/gin" ) func main() { router := gin.Default() r ...

  9. python 定义函数关键字def 简单介绍

    一  在类中定义的def # python中def 是用来干什么的? # 可以定义函数,就是定义一个功能. class People(): def __init__(self): print(&quo ...

  10. 深入理解F1-score

    本博客的截图均来自zeya的post:Essential Things You Need to Know About F1-Score | by Zeya | Towards Data Science ...