Python的偏函数应用

在使用函数的时候,偶尔会遇到这种情况:某个函数带 n 个参数,但在重复使用的过程中,实际只有其中少数几个参数会不同,其他参数的值都是一样的。那么如何可以在多次使用这种函数时,减少输入重复参数的次数或干脆避免输入这些参数呢?

答案之一是使用默认参数。拿我们常用的 int() 函数举例,当我们使用 help() 查看该函数时,可以看到它的使用说明是酱紫的:

int(x=0) –> integer

int(x, base=10) –> integer

可见 int() 函数有一个用法是可以设定传递进来的字符串参数 x 的进制,而且其值默认为 10(当设定了base参数时,x 必须是基于 base 进制的字符串) 。这就避免了我们重复输入,而且 base = 10 确实是最常用的一个值。但,如果在某个情景下我们需要 base = 2 呢?也许我们可以这样重新包装一个函数 baseTwo(本函数不对输入做检查,全权交给 int() 来做):

def baseTwo(x):
    return int(x,base=2)
	
	
>>> int('10010',base=2)
18
>>> baseTwo('10010')
18

看起来没错,不过 Python 有更简单直观的实现路径,就是本篇的主题:偏函数应用(PFA)。这种函数可以固化一个多参函数的若干参数,并返回带有剩余参数的函数对象,听起来就像数学里的偏函数。它也可以被看作是柯里化(currying)的一种泛化形式。它通过 functools 模块下的 partial() 函数来实现。该函数的用法是这样的:

partial(func, *args, **keywords)     #  *args代表非关键字参数,**keywords代表关键字参数,不过为了避免出错,除非你明确知道 func 函数的参数顺序,否则应该尽量使用关键字参数

使用 partial() 来写上面的栗子是这样的:

from functools import partial

baseTwo = partial(int,base=2)


>>> baseTwo('10010')
18

转载于:https://my.oschina.net/lionets/blog/179227

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值