Python函数式编程
map reduce filter sort sorted lambda 组合起来的使用
map
map(function, sequence[, sequence, ...]) -> map对象
对sequence中的item依次执行function(item),执行结果输出为map对象
可迭代对象中的每一项都被当做参数传入到map指定的映射函数function()中
In [1]: map(str, range(5))
Out[1]: <map at 0x1780763f708>
In [2]: list( map(str, range(5)))
Out[2]: ['0', '1', '2', '3', '4']
reduce
reduce(function, sequence[, initial]) -> value
说明:
对sequence中的item顺序迭代调用function,函数必须要有2个参数。要是有第3个参数,则表示初始值,可以继续调用初始值,返回一个值。
实例:
得到1-5的相互乘积可以得到个12345的数值,然后乘完之后再调用第三个参数
In [14]: functools.reduce(lambda x,y:x*y,range(1,6),3)
Out[14]: 360
计算任何数的阶乘
下面是计算3的阶乘
import functools
result = (lambda k: functools.reduce(int.__mul__, range(1, k+1), 1))(3)
print(result)
filter
对sequence中的item依次执行function(item),将执行结果为True(!=0)的item组成一个filter对象(取决于sequence的类型)返回,False则退出(0),进行过滤。
filter(function or None, sequence) -> <filter at xxx>
返回不是2的倍数
filter针对的是对传入函数的数值的结果返回的是否为true,若为true,则加入到filter对象中,为False则过滤
传入的只要是函数名即可。
这里1%2=1,3%2=1,所以返回这两个数
def div(n):return n%2
In [26]: list(filter(div,range(5)))
Out[26]: [1, 3]
sort
对列表内的元素排序,cmp -- 可选参数, 如果指定了该参数会使用该参数的方法进行排序。
key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
排序规则,reverse = True 降序, reverse = False 升序(默认)
sort(cmp=None, key=None, reverse=False)
sort在业务中的常用场景
待续
sorted
sorted(iterable, *, key=None, reverse=False)
排序主要还是在key=xx,key是用来比较的元素
使用场景
待续
lambda
语法
lambda parameters: expression
转换成函数的样子
lambda就是函数的名称,parameters是参数,expression是返回的值。
记忆方法:
lambda本身就是函数的名称,lambda后面的第一个参数是传入的参数,后面的第二个参数是返回的值(并且也是对参数进行操作的,可以忽略等号直接返回操作后的值)
def <lambda>(parameters):
return expression
匿名函数当作函数的返回值
传递两次参数,才可以返回值
def make_incrementor(n):
return lambda x: x + n
f = make_incrementor(42)
print(f(0)) # 42
print(f(1)) # 43
匿名函数传值
匿名函数传值需要把匿名函数括起来,然后之后的括号再传入参数
(lambda x,y:x+y)(1,2)