python10-高阶函数
def use_filer(l): """ 获取指定列表/元组中的奇数 :param l: lsit/tuple :return: """ rest = filter(lambda n:n % 2 != 0,l) return rest if __name__ == '__main__': l = [1,2,3,4,5,6,7,8,9] rest = use_filer(l) print(list(rest))
结果
[1, 3, 5, 7, 9]
filter函数的原理 def is_even(x): return x%2==0 tmp = filter(is_even,range(10)) list(tmp) #最后一定要按照原来的类型转换回来 通过函数f筛选序列中的元素 filter(f,eq) eq:待过滤的序列 f:过滤规则 tmp = filter(lamda n : n % 2 == 0,range(10))
map是python内置函数,会根据提供的函数对指定的序列做映射。
map()函数的格式是:
map(function,iterable,...)
第一个参数接受一个函数名,后面的参数接受一个或多个可迭代的序列,返回的是一个集合。
把函数依次作用在list中的每一个元素上,得到一个新的list并返回。注意,map不改变原list,而是返回一个新list。
def use_filer(l): """ 获取指定列表/元组中的奇数 :param l: lsit/tuple :return: """ rest = filter(lambda n:n % 2 != 0,l) return rest if __name__ == '__main__': l = [1,2,3,4,5,6,7,8,9] rest = use_filer(l) print(list(rest)) def pow_number(l): """ 给定列表,放回每一项的立方 :param l: :return: """ rest_list = [] for x in l: rest_list.append(x*x*x) return rest_list def pow_number_map(l): """ :param l: :return: """ #return map(f,l) return map(lambda n:n*n*n,l) if __name__ == "__main__": rest = pow_number(l) print(rest) print("++++++++++++++++++++++") rest = pow_number_map(l) print(list(rest))
结果:
[1, 3, 5, 7, 9] [1, 8, 27, 64, 125, 216, 343, 512, 729] ++++++++++++++++++++++ [1, 8, 27, 64, 125, 216, 343, 512, 729]
from functools import reduce def get_sum(l): """ 求和 :param l: :return: """ rest = 0 for i in l: rest += i return rest def get_sum_use_py(l): """ 使用内置函数 :param l: :return: """ return sum(l) def get_sum_use_reduce(l): """ 使用reduce函数求和 :param l: :return: """ return reduce(lambda n,m:n + m,l) if __name__ == "__main__": l = [1, 2, 3, 4, 5, 6, 7, 8, 9] print(get_sum(l)) print(get_sum_use_py(l)) print("!!!!!!!!!!!!!!!!!!!") print(get_sum_use_reduce(l))
结果
python中的reduce
python中的reduce内建函数是一个二元操作函数,他用来将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给reduce中的函数 func()(必须是一个二元操作函数)先对集合中的第1,2个数据进行操作,得到的结果再与第三个数据用func()函数运算,最后得到一个结果。
如:
def myadd(x,y): return x+y sum=reduce(myadd,(1,2,3,4,5,6,7)) print(sum)
#结果就是输出1+2+3+4+5+6+7的结果即28
当然,也可以用lambda的方法,更为简单:
sum=reduce(lambda x,y:x+y,(1,2,3,4,5,6,7)) print sum
在python 3.0.0.0以后, reduce已经不在built-in function里了, 要用它就得from functools import reduce.