python 偏函数_python 的偏函数(Partial function)

先引出偏函数

#一个带有可变参数的sum函数

def sum(*args):

s=0for i inargs:

s=s+nreturns#想要输出(sum(10,20)+sum(1,2,3,4,5))

print(sum(10,20)+sum(1,2,3,4,5))

这样虽然通俗易懂,但是很邋遢不专业

于是改为可变参数+关键字参数组合

def sum(*args,**others):

s=0for i inargs:

s=s+i

s1=0for k inothers:

s1=s1+others[k]return s+s1

D= {'value1':10,'value2':20}print(sum(1,2,3,4,5,**D))

这样描写虽说专业了,但是很冗余,不是python的风格,于是就引出了偏函数

from functools importpartialdef sum(*args):

s=0for n inargs:

s= s +nreturns

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 importpartial

partial(func,*args)

注意偏函数的第三部分(命名关键字参数)

案例:我们定义一个mod求余函数,两个参数,一个是被除数,一个是除数,除数我们这里用命名关键字参数表示,默认值2

扩展:我们的除数不固定,可以是对2就行求余,也可以对3,对4,总之我们需要指定除数的值

返回结果: True 或 False

importfunctoolsdef 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进行求余 -- 新函数--偏函数产生

总的来说,原函数里面使用的命名关键字参数,我们用偏函数时,可以重新对里面的命名关键字参数赋值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值