lambda
大概意思就是
def add(x,y):return x+y
改写成 lambda x,y :x+y简单的函数的时候 省略函数名和return
map
class map(object)
map(func, *iterables) --> map object
map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回。
Iterator是惰性序列,因此通过list()函数让它把整个序列都计算出来并返回一个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
这里的参数 是 一个函数 一个序列 一个初始值, 中括号的意思是 初始值可以省略。
reduce把一个函数作用在一个序列[x1, x2, x3, ...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,其效果就是: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()也接收一个函数和一个序列。和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。
注意到filter()函数返回的是一个Iterator,也就是一个惰性序列,所以要强迫filter()完成计算结果,需要用list()函数获得所有结果并返回list。
def not_empty(s):
return s and s.strip()
list (filter (not_empty, ['A','','B', None, 'C', ' ']))
结果当然就是 ['A', 'B', 'C']
感觉这个 not_empty 函数还是挺有趣的,傻傻的我- -。
zip
class zip(object)
zip(iter1 [,iter2 [...]]) --> zip object
eg1:基本用法
for i in zip((1,2,3),(4,5,6)):
print(i)
结果
(1,4)
(2,5)
(3,6)
eg2:改变字典 key和value的对调
dicta={'a':'aa','b':'bb'} #定义一个字典a
dictb=zip(dicta.values(),dicta.keys()) #用zip方法进行对调
print(dictb)
<zip object at 0xhgkjahgka> #输出得到一个zip类型 我瞎j8写的
print(dict(dictb)) #类型转换
{'aa':'a','bb':'b'} #对调成功