結合匿名函數一起的使用的函數
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.異常捕獲使用頻率越低越好
"""
