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)
posted @ 2022-04-27 10:35  索匣  阅读(22)  评论(0编辑  收藏  举报