什麼是匿名函式
匿名函式: 沒有名字的函式,意味著只能用一次就被**
匿名函式用 lambda 表示
為何用匿名函式:用於臨時使用一次的功能
匿名函式的定義格式
lambda 引數,引數:表示式 #引數規則和有名函式是一樣的
lambda x,y:return x+y#這個位置的return是自帶的,所以寫表示式時候不需要寫
表示式解析:匿名函式 + 引數:表示式,將表示式的值用return返回
ps:匿名函式自動有乙個返回值,自帶return,不能寫return,也不能寫語句,但是只要有返回值的表示式都可以寫
匿名函式的呼叫方式
print(lambda x,y:x+y)(引數1,引數2)
ps:匿名函式都是與其他功能配合去一起用
匿名函式例項
salaries={
'egon':3000,
'alex':100000000,
'wupeiqi':10000,
'yuanhao':2000
例:用倪匿名函式獲取字典中工資最高的人的名字
print(max(salaries,key=lambda k:salaries[k])) #將匿名函式的返回值傳遞給key方法,告訴max方法對比的依據是什
邏輯原理就是max先遵循迭代器協議,將salaries的key取出來,然後傳給max裡面的key這個引數,在通過key這個引數傳給函式lamdb
函式內的引數k,引數k再將引數傳遞給表示式,最後獲取的值返回給key,max依據key引數做出判斷
例:用匿名函式獲取字典中工資最低的人的名字
print(min(salaries,key=lambda k:salaries[k]))
例:用匿名函式將字典按照工資的小到大排序放入列表(比薪資取人名)
res=sorted(salaries,key=lambda k:salaries[k],reverse=true) #sorted的reverse預設是false,如果是true就是反過來排序
print(res)
例:用倪匿名函式獲取字典中工資最大的並且取得這個數字
print(max(salaries.values()))
ps:max預設方法遵循迭代器協議,從字典中取出的值是key,迭代器協議是無法更改的
ps:max方法裡面有乙個引數是key,這個key不是指字典的key,只是表示max方法的引數,這個key就是告訴max方法比較依據是什麼,key一定要指向乙個函式的記憶體位址
匿名函式配合冷門方法,需要了解:
map()#就是對映的意思
就是有多個值,每個值按照乙個對映規則,產生乙個新的值
map(func,iter)有兩個引數,第乙個就是對映規則,另乙個就是可迭代物件
例:把乙個列表按照對映規則對映成乙個新的值
names=['alex','oldboy','kevin','hxx'] #名字列表
res=map(lambda item:item+'_sb',names)
print(list(res))
map可以用列表生成式代替(所以這個方法基本不會用到)
print((name+'_sb' for name in names)) #列表生成器表示式
ps:map的底層原理就是乙個for迴圈一樣的原理,將乙個列表變成迭代器物件,然後next乙個值,將值傳給前面的函式做系列運算,然後將函式的返回值當做對映之後的值
ps:python2中直接將值全部對映成乙個新值放入記憶體中,python3中直接就是乙個迭代器(更省空間)
reduce#就是合併的意思
列:從1-100的數相加
from functools import reduce
res=reduce(lambda x,y:x+y,range(1,101))
print(res)
ps:reduce裡面有乙個初始值sequence,如果不指定就會取range裡面的第乙個值作為初始值,先將可迭代物件變成迭代器物件,然後next一次取得乙個值傳遞給前面的函式,然後與初始值相加做運算,得到乙個新值作為初始值,然後又next一次得到值與初始值相加,直到加到最後乙個值
例:合併字串
l=['a','b','c','d']
res=reduce(lambda x,y:x+':'+y,l)
print(res)
ps:邏輯原理同上面的整數相加
print(':'.join(l))
合併字串可以用join方法替代
print(':'.join(l))
filter #過濾
filter有兩個引數,乙個就是過濾規則,另乙個就是可迭代物件
names=['alex_sb','egon','kevin_sb','oldboy_sb']
res=filter(lambda x:x.endswith('sb'),names)
print(list(res))
filter可以用列表表示式替代
print([name for name in names if name.endswith('sb')])
ps:邏輯原理就是filter將names列表變成迭代器,next一次然後取出乙個值,傳遞給前面的lanbda函式,lambda函式取得值後傳入後面的表示式,然後返回結果,依次直到再也取不到值則結束
14 再走Python路 匿名函式
2020.3.4 bug369456 匿名函式的使用 單引數的匿名函式 a lambda a a a print a 5 多引數的匿名函式 b lambda a,b a b print b 5,6 執行結果如下圖所示 匿名函式的應用,計算機的製作 def jisuan str input 請將計算的...
函式 匿名函式
匿名函式 沒有名稱的函式。匿名函式的使用 1 將其賦值給乙個函式 var show function show 2.匿名函式的自我執行 function hi 函式 無參,有參,帶返回值 帶有返回值的函式 var num function a,b 10,9 consloge.log num 例子 v...
LINQ學習系列 1 4 匿名物件
一.匿名物件介紹 上 var result new view code 若想輸出這個新物件的age屬性的內容,可以讓console.writeline深入到該物件的下一層,console.writeline reuslt,1 即可 雖然匿名物件沒有物件名,不過仍然是型別 編譯器將自動為其生成名字。的...