匿名函數:一句話函數,用於內置函數,匿名函數結合內置函數使用python
func = lambda x,y : x+y 名字func :前形參 :後返回值函數
示例1:code
func = lambda x : (x[0],x[2]) 返回多個元素加()對象
示例2:排序
func = lambda x,y :x if x > y else yip
func = lambda *args : max(args) #返回最大的值,也能夠添加三元運算>utf-8
內置函數:***加key的 min,max,sorted,map,reduce,filter字符串
加key的格式:it
將最小的值返回io
dic = {'a':3,'b':2,'c':1}
print(min(dic.values(),key=lambda x:x)) key=lambda 函數名 :前形參 :後返回值
檢查一個對象是否能夠調用
def haiyang(): pass haiyang() print(callable(haiyang))
返回數字的絕對值
l = -8 print(abs(l))
數字相加求和
print(sum([1,2,3,4,5])) #sum函數內,存放的是可迭代函數 print(sum([1,2,3,4,5],10))
min求最小值
max求最大值
# 將成績最低的從屬於的那個列表返回。 # 將成績最低的分數返回。 dic = {'a':['李業',67],'b':['懟哥', 95],'c':['方垚', 55]} print(dic[min(dic,key=lambda x:dic[x][1])]) #min取出來的key爲c,經過字典c key鍵找到列表 print(dic[min(dic,key=lambda x:dic[x][1])][1]) #找到列表在經過[1]找到55
將一個可迭代對象進行翻轉,返回的是一個迭代器
l = reversed('胡海洋') print(list(l)) #翻轉獲取到的是一個生成器,須要經過list進行打印 l1 = reversed([1,2,3,4,5,6]) print(list(l1)) #翻轉列表
將字符串轉換成bytes類型
l = "胡海洋" l1 = l.encode('utf-8') #encode轉換成bytes字節 print(l1) l2 = bytes(l,encoding='utf-8') print(l2)
將可迭代對象做爲參數,將對象中對應的元素,打包成一個個元祖,若是變量的元素不一直,按最短的取
l1 = [1,2,3,4] l2 = ['a','b','c','d','e'] for i in zip(l1,l2): # print(i)
排序函數
語法:sorted(iterable,key=None,reverse=False)
iterable 可迭代對象
key 排序規則,sorted內部會將可迭代對象中每個元素,傳遞給函數形參,進行排序
reverse True 倒序 Flase正序
列表排序:
l = [1,3,4,7,8,2] l1 = sorted(l) #默認正序 print(l1) l2= sorted(l,reverse=True) #爲True倒序 print(l2)
字典排序:
dic = {1:'a',3:'c',2:'b'} dic1 = sorted(dic) # dic1鍵值排序爲1,2,3 dic2 = {} for i in dic1: #建立新的字典,for循環排序好key,添加到新字典 dic2[i] = dic[i] print(dic2)
結合函數使用:
# 按照列表內的字符串長度排序 l1 = ['天龍八部','西遊記','紅樓夢','三國演義'] print(sorted(l1,key=lambda x:len(x)))
#根據年齡進行排序 l1 = [{'id':1,'name':'胡海洋','age':18}, {'id':2,'name':'俊麗','age':17}, {'id':3,'name':'寶寶','age':1},] print(sorted(l1,key=lambda x:x['age'])) #x['age] 先找到年齡key在進行排序
篩選過濾
語法:filter(function,iterable)
iterable 可迭代對象
function 用來篩選函數,在filter中會自動把迭代對象中的元素傳遞給function,以後根據function返回 True或者Flase來判斷是否保留此項數據
字典篩選年齡大於十六的
l1 = [{'id':1,'name':'alex','age':18}, {'id':1,'name':'wusir','age':17}, {'id':1,'name':'taibai','age':16},] l2 = filter(lambda x:x['age'] > 16,l1) print(list(l2)) #變成迭代器一一進行判斷,lamdba函數,x形參,x['age]返回值判斷,l1可迭代對象
映射函數
語法:map(function,iterable)
能夠對可迭代對象中的每個元素進行映射,分別取值執行function
計算列表中每一個元素的平方,返回新列表
lst = [1,2,3,4,5] # def func(s): # return s*s # # mp = map(func,lst) # print(mp) # print(list(mp)) # 改寫成lamdba print(list(map(lambda x:x*x,lst)))
計算兩個列表中相同位置的數據的和
lst1 = [1, 2, 3, 4, 5] lst2 = [2, 4, 6, 8, 10] print(list(map(lambda x,y:x+y,lst1,lst2))) #傳入多個值進行計算
使用方法:
reduce(函數名,可迭代對象)
做用:
先把列表中的前兩個元素取出來,計算出結果進行保存,當進行到第二個元素傳參時,將第一次計算完的 結果與10相乘計算,求出一個新的值將最開始臨時保存的值替換掉,依次類推
from functools import reduce def func(x,y): return x * 10 + y # 第一次的時候 x是1 y是2 x乘以10就是10,而後加上y也就是2最終結果是12而後臨時存儲起來了 # 第二次的時候x是臨時存儲的值12 x乘以10就是 120 而後加上y也就是3最終結果是123臨時存儲起來了 # 第三次的時候x是臨時存儲的值123 x乘以10就是 1230 而後加上y也就是4最終結果是1234而後返回了 l = reduce(func,[1,2,3,4]) print(l) #lamdba方法: from functools import reduce l = reduce(lambda x,y:x * 10 + y,[1,2,3,4]) print(l)