lambda?
大概意思就是
def add(x,y):return x+y
改寫成 lambda x,y :x+y簡單的函數(shù)的時(shí)候? 省略函數(shù)名和return
map
class map(object)
? map(func, *iterables) --> map object
map()函數(shù)接收兩個(gè)參數(shù),一個(gè)是函數(shù)女嘲,一個(gè)是Iterable粪糙,map將傳入的函數(shù)依次作用到序列的每個(gè)元素,并把結(jié)果作為新的Iterator返回。
Iterator是惰性序列量蕊,因此通過list()函數(shù)讓它把整個(gè)序列都計(jì)算出來并返回一個(gè)list。
eg
>>> r = map(lambda x:x*x, [1,2,3,4,5,6,7,8,9])
>>> list(r)
[1,4,9,16,25,36,49,64,81]
reduce
reduce(...)
? ? reduce(function, sequence[, initial]) -> value
?這里的參數(shù)? 是 一個(gè)函數(shù) 一個(gè)序列 一個(gè)初始值, 中括號(hào)的意思是 初始值可以省略正塌。
reduce把一個(gè)函數(shù)作用在一個(gè)序列[x1, x2, x3, ...]上,這個(gè)函數(shù)必須接收兩個(gè)參數(shù)恤溶,reduce把結(jié)果繼續(xù)和序列的下一個(gè)元素做累積計(jì)算乓诽,其效果就是:reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
from? functools import reduce
DIGITS = {'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9}
def? char2num(s):
????????return DIGITS[s]
def? str2int(s):
????????return? reduce(lambda x, y: x *10+ y, map(char2num, s))
filter
class filter(object)
?????????filter(function or None, iterable) --> filter object
和map()類似,filter()也接收一個(gè)函數(shù)和一個(gè)序列咒程。和map()不同的是鸠天,filter()把傳入的函數(shù)依次作用于每個(gè)元素,然后根據(jù)返回值是True還是False決定保留還是丟棄該元素帐姻。
注意到filter()函數(shù)返回的是一個(gè)Iterator稠集,也就是一個(gè)惰性序列,所以要強(qiáng)迫filter()完成計(jì)算結(jié)果饥瓷,需要用list()函數(shù)獲得所有結(jié)果并返回list剥纷。
def not_empty(s):
????????return s and s.strip()
list (filter (not_empty, ['A','','B', None, 'C', ' ']))
結(jié)果當(dāng)然就是 ['A', 'B', 'C']
感覺這個(gè) not_empty 函數(shù)還是挺有趣的,傻傻的我- -呢铆。
zip
class zip(object)
zip(iter1 [,iter2 [...]]) --> zip object
eg1:基本用法
for i in??zip((1,2,3),(4,5,6)):
? ? print(i)
結(jié)果
(1,4)
(2,5)
(3,6)
eg2:改變字典 key和value的對(duì)調(diào)
dicta={'a':'aa','b':'bb'}? ? ?#定義一個(gè)字典a
dictb=zip(dicta.values(),dicta.keys())? ?#用zip方法進(jìn)行對(duì)調(diào)
print(dictb)
<zip object at 0xhgkjahgka>? ? ?#輸出得到一個(gè)zip類型? 我瞎j8寫的
print(dict(dictb))????????#類型轉(zhuǎn)換
{'aa':'a','bb':'b'}? ????#對(duì)調(diào)成功?