结合匿名函数一起的使用的函数
1..map() 映射
l1 = [1,2,3,4]
map(lambda x:x+1,l) #循环获取列表中每个元素并传递给匿名函数保存返回值
2..zip() 拉链
l1 = [11,22,33,44,55,66]
name_list = ['jason','kevin','tony','jerry']
nwe_list = []
for i in range (len(1)) # 循环次数为列表长度,有range所以开始为0
new_list.append((l1[i],name_list[i])) # 为新列表添加元组,()内为列表的索引
print(new_list) # 打印新的列表
[(11, 'jason'), (22, 'kevin'), (33, 'tony'), (44, 'jerry')] #两个列表长度要保持一直
# 这是将两个列表根据索引位置组合
l1 = [11,22,33,44,55,66]
name_list = ['jason','kevin','tony','jerry']
res = zip(l1,name_list) # 通过zip()拼接两个列表
print(list(res)) # 返回值为迭代器对象,需要list
[(11, 'jason'), (22, 'kevin'), (33, 'tony'), (44, 'jerry')] # 拉链长度为最短的列表
# 比第一种方法要简单很多
3.max与min 求最大值与最小值
列表值
l = [11, 22, 33, 44, 55, 66, 77]
print(max(l))
77
print(min(l))
11
字典值
d = {
'jason':3000,
'Bevin':1000000,
'Ascar':10000000000,
'aerry':88888
}
def index(key): # 函数
return d[key] # 返回值是字典的V值
print(max(d,key=index)) # 返回的就是拥有最大值字典V的K的值
Ascar
也可以直接使用匿名函数
print(max(d,key = lambda key:d[key])) # 第一个key是需要=函数体然后匿名函数关键字,参数,返回值为字典的K
4.filter 过滤
列表中只保留大于三十的元素
l1 = [11,22,33,44,55]
方法一:
print(list(i for i in l1 if i > 30)) # 列表生成式
过滤:
print(list(filter(lambda x : x > 30,l1))) # 过滤
# filter里面需要填入函数,可以用匿名函数,简单快捷。之后填入要处理的数据
5.reduce 归总
需要模块才可以使用
from functools import reduce
求出列表内的和
l1 = [11,22,33,44,55]
方法一:
l2 = 0
for i in l1:
l2 = i+l2
print(l2)
reduce 归总
res = reduce(lambda x, y : x + y , d) # 可以给起始值。比如100.直接加上这个100
print (res)
# reduce 运行原理将多个元素变成单个元素,将列表中的前两个元素取出让入匿名函数,之后去除一个一个元素,与前两个相加的和相加,知道全都加完
方法三:
sum(l1) # 可以相加列表中的整形,字典中的整形的V值,整形的K值 sum里面默认起始0,需要整形
可迭代对象
迭代:
迭代即更新换代 每次的更新都必须依赖与上一次的结果
1.什么是可迭代对象
内部有__iter__()方法的对象。 # 使用iter()
'''针对双下划线,双下滑线结尾的方法 最为专业标准的读法为‘双下方+方法名’'''
2.为什么要有可迭代对象
可以在一些数据不支持索引取值的情况下另一种取值方式
3.怎么使用
将要改变的数据进行__iter__就可以更改
i = 12 # 没有
f = 11.11 # 没有
s = 'jason' # 有
l = [111,22,33,4] # 有
d = {'username':'jason','pwd':123} # 有
t = (11,22,33) # 有
se = {11,22,33} # 有
b = True # 没有
file = open(r'a.txt','w',encoding='utf8')
"""
含有__iter__的有
字符串 列表 字典 元组 集合 文件对象
上述通常为可迭代对象
"""
调用之后变成迭代器对象,如果需要一次性取值需要用list或者set或者tuple接收,一次性打印出来
或者使用__next__ 一个一个取出,或者for循环取出
迭代器对象
如何生成迭代器对象
让可迭代对象执行__iter__方法
1.什么是迭代器对象
内部有__ next__方法和__iter__方法,就是迭代器对象
2.为什么要有迭代器对象?
提供不依赖索引取值的方法
3.怎么使用迭代器对象
l1 = [1,2,3,4,5,6]
l2 = l1.__iter__() #iter(l1)
print(l2.__next__()) # next()
print(l2.__next__())
print(l2.__next__())
print(l2.__next__())
易错重点
# print(l1.__iter__().__next__())
# print(l1.__iter__().__next__())
# print(l1.__iter__().__next__())
# print(l1.__iter__().__next__())
# print(l1.__iter__().__next__())
# print(l1.__iter__().__next__())
for循环本质
l1 = [1,2,3,4,5,6,7,8,9,99,88,77]
循环取值,不使用for循环
1.先将列表转换为迭代器对象
res = l1.__iter__()
2.循环执行__next__()
while True:
print(res.__next__())
for循环内部原理
1.将关键字in后面的数据先调用__iter__方法转为迭代器对象
2.循环执行__next__方法
3.去完之后__next__会报错,但for循环会自动捕捉异常并处理
应急措施
1.什么是异常
代码运行会出错导致异常,异常发生如果没有解决方案则会结束整个程序
2.异常三个重要组成部分
1.traceback
翻到最下面从下往上的第一个蓝色字体鼠标左键点击即可跳转到错误的代码所在的行
2.XXXError
错误的类型
3.错误类型冒号后面的内容
错误的详细原因(很重要 仔细看完之后可能就会找到解决的方法)
3.错误的种类
1.语法错误
不被允许的 出现了应该立刻修改!!!
2.逻辑错误
可以被允许的 出现了之后尽快修改即可
'''修改逻辑错误的过程其实就是在从头到尾理清思路的过程'''
4.基本语法结构
try:
有可能会出错的代码
rxcept 错误类型 as e:
出错之后对应的处理机制(e是错误的详细信息)
万能异常
try:
print(name)
except Exception:
解决方案
"""
异常捕获句式和万能异常
1.有可能会出现错误的代码才需要被监测
2.被监测的代码一定要越少越好
3.异常捕获使用频率越低越好
"""