ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

2021-05-04

2021-05-04 12:30:19  阅读:261  来源: 互联网

标签:partial 函数 04 05 原函数 参数 2021 print mult


偏函数

语法:partial(fuc,*args,**keywords)

说明:fuc是一个函数,这个函数可以是自定义函数,也可以是python内置函数;*args是可变参数;**keywords是一个关键字参数

偏函数就是某一种函数带有固定参数的实现,使用偏函数,可以有效的固定预先确定的参数来缓存函数参数,然后在函数运行时获得需要的剩余参数,最后将缓存的函数参数释放并传递到最终的参数中,从而使用最终确定的所有参数去调用函数。

下面通过几个例子理解

一:

partial函数的作用就是将所作用的函数作为partial 函数的第一个参数,原函数的各个参数依次作为partial函数的后续参数,原函数有关键字参数的一定要带上关键字没有则按原有参数顺序进行补充。

例.进制的转换


int_tran = partial(int,base=16)   #转换成整数,此处关键字参数为16,即16进制表示
print(int_tran('100'))            #100为16进制
print(int_tran('100',base=10))    #100为10进制

结果为:

256
100

二:

partial的作用就是把一个函数的某些参数固定住(设置默认值),返回一个新的函数,调用这个新函数就会变得更简单。
偏函数应用的关键是接收函数对象的* args和** keywords参数。其中,对偏函数参数的第二个部分(可变参数),按原有函数的参数顺序进行补充,参数将作用在原函数上,最后偏函数返回一个新函数。

例.定义一个sum函数,参数为* args可变,计算这些可变参数的乘积。普通函数的实现方法如下:

def mult( * args):
    m= 1
    for n in args:
        m=m*n
    return m

#直接调用

print(mult(3,5,6,9))

要在此基础上在继续乘以15,20甚至更多,有如下方法:

  • 直接使用mult
print(mult(3,5,6,9)*mult(15,20))
  • 使用偏函数
#偏函数返回15和20.分别作用在u的第一个参数和第二个参数的位置形成新函数import functools
print(mult(3,5,6,9)*mult(15,20))


result= partial(mult, 15,20)

print(result(3,5,6,9))

三:

对偏函数的第三个部分(关键字参数) ,按原有函数的关键字参数进行填补,参数将作用在原函数上最后偏函数返回一个新函数。

#求列表中大于给定值的数据个数,m位于*后面表示关键字参数,默认取值为10
def  max_list(ls,*,m=10):
    t=0
    for i in ls:
        if i>m:
            t=t+1
    return t
#通过偏函数构建了一个新函数,新函数的第三个关键字参数默认取值为5
new_func = partial(max_list,m=5)
#调用原函数,求大于m的值的个数个
print(max_list([2,6,5,8]))
#调用偏函数,判断的是大于5的数的个数
print(new_func([2,6,5,8]))

结果:

0
2

可以看到运用偏函数可以在一定程度上简化原函数的参数,用 partial可以创建一个新的函数,该新函数可以固定原函数的部分参数,从而保证函数在调用时更简单。

标签:partial,函数,04,05,原函数,参数,2021,print,mult
来源: https://blog.csdn.net/ggj0727/article/details/116398661

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有