python 的偏函数(Partial function)
Posted 小小喽啰
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 的偏函数(Partial function)相关的知识,希望对你有一定的参考价值。
关于偏函数这个知识点,廖雪峰老师官网说的比较简单,我就再参考了另外一个花里花俏的园子:https://www.cnblogs.com/sui776265233/p/9881628.html#_label0
先引出偏函数
#一个带有可变参数的sum函数 def sum(*args): s=0 for i in args: s=s+n return s #想要输出(sum(10,20)+sum(1,2,3,4,5)) print(sum(10,20)+sum(1,2,3,4,5))
这样虽然通俗易懂,但是很邋遢不专业
于是改为可变参数+关键字参数组合
def sum(*args,**others): s=0 for i in args: s=s+i s1=0 for k in others: s1=s1+others[k] return s+s1 D= {\'value1\':10,\'value2\':20} print(sum(1,2,3,4,5,**D))
这样描写虽说专业了,但是很冗余,不是python的风格,于是就引出了偏函数
from functools import partial def sum(*args): s = 0 for n in args: s = s + n return s sum_add_10 = partial(sum,10) #10 作用在sum第一个参数的位置 sum_add_10_20 = partial(sum,10,20) #10 20 分别作用在sum第一个和第二个参数的位置 print(\'A____________我们看下原函数sum的函数地址入口:\') print(sum) print(\'B______我们看下partial函数返回函数的地址入口:\') print(partial(sum,10)) print(sum_add_10(1,2,3,4,5)) # 10 + 1 + 2 + 3 + 4 + 5 = 25 sum_add_10 实际上等同于sum(10,*args) print(sum_add_10_20(1,2,3,4,5)) # 10 + 20 + 1 + 2 + 3 + 4 + 5 = 45
partial函数的作用就是:将所作用的函数作为partial()函数的第一个参数,原函数的各个参数依次作为partial()函数的后续参数,原函数有关键字参数的一定要带上关键字,没有的话,按原有参数顺序进行补充
偏函数partial一共有三个部分
(1)第一个参数是一个函数或者是python内置函数
(2)第二个参数是一个勒边参数
(3)第二个参数可以是一个命名关键字参数,比如内置函数int的第二个参数就是命名关键字参数,默认base=10,表示int转换时默认是10进制的
偏函数的demo:
from functools import partial partial(func,*args)
注意偏函数的第三部分(命名关键字参数)
案例:我们定义一个mod求余函数,两个参数,一个是被除数,一个是除数,除数我们这里用命名关键字参数表示,默认值2
扩展:我们的除数不固定,可以是对2就行求余,也可以对3,对4,总之我们需要指定除数的值
返回结果: True 或 False
import functools def mod(m,*,key=2): return m % key == 0 mod_to_2 = functools.partial(mod,key=2) print(\'A__3___使用原函数的默认关键字参数对2进行求余:\') print(mod(3)) #对2进行求余-- 原函数 使用默认参数 print(\'B__3___使用偏函数对2进行求余:\') print(mod_to_2(3)) #对2进行求余-- 新函数 --偏函数产生 mod_to_5 = functools.partial(mod,key=5) print(\'C__25___使用原函数的关键字参数对5进行求余:\') print(mod(25,key=5)) #对5进行求余 -- 原函数 print(\'D__25___使用偏函数对5进行求余:\') print(mod_to_5(25)) #对5进行求余 -- 新函数--偏函数产生
总的来说,原函数里面使用的命名关键字参数,我们用偏函数时,可以重新对里面的命名关键字参数赋值
以上是关于python 的偏函数(Partial function)的主要内容,如果未能解决你的问题,请参考以下文章
Python functools.partial 偏函数
Python functools.partial 偏函数 -- 2019-08-08 18:01:31