[Python]学习基础篇:函数的进阶篇

对于函数大家都熟知不过了,但是对于一些函数还是费力的理解,下来我们来看看Python自带的一些函数,在此之前,还是请大家了解什么是高阶函数。
高阶函数:函数中的高阶函数

  • map()函数
    格式:map(func,seq)
    返回值:list
    map函数的作用是将参数函数func作用于seq中的每一个元素,每个元素产生的结果存放进list中。
    例如:我们以函数func=x+x*x为例,作用于序列[1,2,3,4,5,6,7,8]上
!/bin/python
def func(x):
    return x+x*x
list=map(func,[1,2,3,4,5,6,7,8])
print(list)
运行结果:[2,6,11,20,30,42,58,72]
  • filter()函数
    格式:filter(func,seq)
    filter函数的作用和map函数的作用一样,将函数作用于序列的每一个元素上,但是不同的是filter会根据返回值True/false来决定保留还是丢弃,所以被称之为过滤函数
    例如:我们有一个函数查找字符串中为小写字母的元素
!/bin/python
def func(x):
    return x.islower()
str='jiJUHDEjideqHEUH'
list=filter(func,list(str))
print(list)
运行结果:j['i','j','i','d','e','q']
  • reduce()函数
    格式:reduce(func,seq)
    返回值:func的累积结果
    reduce函数不同于map和filter函数,它是将函数作用于整个seq上,并将结果和序列的下一个元素座累积计算。
    例如:序列求和,在python中看可以使用sum函数实现,但是也可以使用reduce函数实现
!/bin/python
def sum(x,y):
    return x+y
count=reduce(sum,[1,2,3,4,5,6,7,8,9,10])
print(count)
运行结果:55

对于以上的例子都是对于单个函数的简单运用,下来我们组合的使用以上函数。
例如:求一个序列中的水仙花数,并将水仙花数相加

!/bin/python
def is_bai(x):
    return x>100
def is_flower(x):
    a=int(x/100)
    b=int((x-a*100)/10)
    c=x-a*100-b*10
    return a*a*a+b*b*b+c*c*c
def func1(x,y):
    return x+y
list=[12,123,153170372371]
sum=reduce(func1,map(is_flower,filter(is_bai,list)))

  • 匿名函数
    匿名函数是指不适用def关键字定义一个函数,而是使用lambda创建一个函数。
    格式:lambda 参数:返回值
    对于匿名函数,它的主体不是一个代码块,而是一个表达式,下来我们用一个例子来理解一下lambda的格式。
    如:我们求两个是的和
    一般情况我们是这样来编码的:
!/bin/python
def sum(x,y):
    return x+y
sum(1,3)
结果为:4

我们使用匿名函数来完成:

!/bin/python
c=lanbda x,y:x+y
print(c)
结果为:4

格式中的冒号(:)是分隔符
匿名函数的调用:
变量=lanbda 参数:返回值

注意:Python对匿名函数的支持有限,只有一些简单的情况下可以使用匿名函数。


  • 偏函数
    偏函数是由Python模块中的functools模块提供的一个函数,这样可以是代码更加简洁
    格式:partial(funct,funct_argx1,funct_argx2……)
    偏函数是将所有承载的函数作为partial()函数的一个参数,原函数的各个参数一次作为partial()函数的后续参数,除非使用关键字参数。
    作用:把一个函数的某些参数固定住(设置默认参数),返回一个新函数。
    下来我们来举个例子理解一下这个格式。
    如:我们求不同数对于3的取余
!/bin/python
def mod(m,n)
    return m%n
func_new=partial(mod,3)
print('调用自定义函数,100对3取余',mod(100,3))
print('调用偏函数,100对3取余',func_new(3))
运行结果为:
调用自定义函数,1003取余1
调用偏函数,1003取余1

对于偏函数可以设定默认值降级函数调用的难度,同时当函数的参数个数太多,需要简化时,使用functools.partial可以创建一个新的函数,这个新函数可以固定住原函数的部分参数,从而在调用时更简单。

猜你喜欢

转载自blog.csdn.net/kairui123/article/details/78992867