【Python】functools partial函数

functools partial函数

首先从一个例子说起:
在这里插入图片描述
首先我们定义了一个function add ,它接收两个参数a和b,返回a和b的和。然后我们使用partial ,第一个参数是fun ,即传入我们的函数add,然后再传入一个参数 ,这里是 1 ,它返回给我们一个新的function (addOne)。我们发现这个新的function 只需要接受一个参数,然后返回这个参数与1 的和。看起来其实相当于我们在使用add函数时固定了a的值为1(注意是从左到右固定参数的值,你可以自己定义一个减法测试)。那我们是不是可以固定多个参数的,当然是可以的,看下面这个例子:

在这里插入图片描述
在这里插入图片描述
实际上我们是固定了a的值为2,b的值为3,当传入4的时候相当于c的值为4。

下面举个例子来解释为什么要用这个函数:

import random as RND
fnx = lambda: RND.randint(0, 10)
data = [ (fnx(), fnx()) for c in range(10) ]
target = (2, 4)
 
import math
def euclid_dist(v1, v2):
    x1, y1 = v1
    x2, y2 = v2
    return math.sqrt((x2 - x1)**2 + (y2 - y1)**2)

其中data中包含了一系列的点的坐标,我们想要计算这些点到target点的距离并且进行排序。
于是我们使用sort函数 :

data.sort(key=euclid_dist)

但是报错如下:
在这里插入图片描述
sort函数只接受这样一个函数——这个函数只有一个参数。
于是乎我们的partial就派上用场了:
在这里插入图片描述

参考博客

Python:functools partial详解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值