Python的偏函数应用
博客专区 > lionets 的博客 > 博客详情
Python的偏函数应用
lionets 发表于4年前
Python的偏函数应用
  • 发表于 4年前
  • 阅读 322
  • 收藏 2
  • 点赞 0
  • 评论 0

腾讯云 新注册用户 域名抢购1元起>>>   

在使用函数的时候,偶尔会遇到这种情况:某个函数带 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
共有 人打赏支持
粉丝 89
博文 95
码字总数 130534
×
lionets
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: