内置函数与lambda匿名函数
內(nèi)置函數(shù)
匿名函數(shù)lambda
基本形式:
lambda: args : expression ,表達式的結(jié)果就是函數(shù)的return value
func = lambda x:x*2 func(2) # 也可以這樣來調(diào)用 lambda x : x < 3 # 返回True/Falsewhy lambda?
定義一個有名函數(shù)時def func():pass,只要名字不被刪除,就一直占著內(nèi)存。如果只用一次,用完了還要del func。 但是lambda匿名函數(shù),只是一個內(nèi)存地址,沒有綁定變量名,會被回收。另外,簡單的函數(shù)用lambda寫更方便。
lambda和內(nèi)置函數(shù)map, reduce, filter,max的應用
map 映射:map(函數(shù), 序列)
map迭代序列,將元素傳給函數(shù),將函數(shù)返回的結(jié)果組成map obj這個迭代器,可以用list或for循環(huán)來查看。
m = map(lambda x : x*2, [1, 2, 3, 4]) print(list(m)) # [2, 4, 6, 8]reduce 合并:reduce(函數(shù),序列,初始值)
在python3中使用reduce函數(shù)需要 from functools import reduce 導入。
from functools import reduce print(reduce(lambda x,y : x+y, range(100))) # reduce循環(huán)序列的元素,讓函數(shù)每次接收兩個元素, # 返回的結(jié)果再和序列的下一個元素作累積計算filter 過濾:filter(函數(shù),序列)
循環(huán)序列的元素,讓函數(shù)判定元素的bool值,如果為真,返回元素組成的filter obj 迭代器對象。
print(list(filter(lambda x : x > 0, [-3, -5, 2, 1]))) # [2, 1]max
用max函數(shù)找出一個字典中的最大值。
# 找出分數(shù)最高的那位同學 d = {'Ayhan': 100, 'Seb': 98, 'Tom': 97, 'Ronin': 98} res = zip(d.values(), d.keys()) # max() 遵循迭代器協(xié)議,如果傳入的字典,那么比較key的大小。所以用zip處理一下。 print(max(res)) # (100, 'Ayhan')max(dict, key=func) max函數(shù)中的key可以指定比較的對象。循環(huán)字典得到key,把字典key傳給key的函數(shù)處理后得到的返回值,再作比較。注意,max的key和字典的key不同。上面的栗子可以改寫:
d = {'Ayhan': 100, 'Seb': 98, 'Tom': 97, 'Ronin': 98} print(max(d, key = lambda x : d[x])) # Ayhan迭代器協(xié)議
很多內(nèi)置函數(shù)都是遵循迭代器協(xié)議的,上面的函數(shù):filter()、map()、reduce()、max()、min()、list()、for i in iterable。遵循迭代器協(xié)議的函數(shù)能對可迭代對象就行迭代。
總結(jié)
以上是生活随笔為你收集整理的内置函数与lambda匿名函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《Linux内核设计与实现》读书笔记(十
- 下一篇: [置顶] hdu 1890 伸展树区间翻