Python:functools partial详解

Python:functools partial详解Python functoolspar 详解首先从一个例子说起 首先我们定义了一个 functionadd 它接收两个参数 a 和 b 返回 a 和 b 的和 然后我们使用 partial 第一个参数是 fun 即传入我们的函数 add 然后再传入一个参数 这里是 1 它返回给我们一个新的 function addOne 我们发现这个新的 function 只需要接受一个参数

Python:functools partial详解

首先从一个例子说起:



Python:functools partial详解



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



Python:functools partial详解



可以看出我们是可以固定多个参数的,如上面的addTwo函数相对于原函数add固定了a和b的值 。 


有了初步的印象,接下来让我们来看看官方给出的定义:
Python:functools partial详解



其中*args 和 keywords 表示参数不定的情况:*args表示任何多个无名参数,它是一个tuple;keywords表示关键字参数,它是一个dict。
看起来有些复杂,我们忽略keywords,其实这个函数的功能类似于这样:


Python:functools partial详解




我们使用print来打印参数以看下到底是个怎样的流程:



Python:functools partial详解



实际上我们是固定了a的值为2,b的值为3,当传入4的时候相当于c的值为4。你可以把官方给出的partial函数copy到console,加上print来
查看更详细的过程。这里只简要举个类似的情况。


举个粒子~~我们来瞧瞧为什么要使用它:
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)

但是报错如下:

Python:functools partial详解





sort函数只接受这样一个函数——这个函数只有一个参数。
于是乎我们的partial就派上用场了:



Python:functools partial详解






参考:


https://docs.python.org/2/library/functools.html
https://stackoverflow.com/questions//how-does-the-functools-partial-work-in-python/







版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/210702.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 上午7:05
下一篇 2026年3月19日 上午7:05


相关推荐

  • 已知法向量 求投影_求点在平面上的投影点坐标

    已知法向量 求投影_求点在平面上的投影点坐标Q1 怎样求空间曲面在坐标平面上的投影 求曲面 z f x y 在 XOY 平面内的投影区域 只要把曲面的边界曲线投影到 XOY 平面 投影曲线在 XOY 平面内围成的区域就是所求 x0d 曲面 z f x y 的边界曲线 应该是它与另外一个曲面的交线 例如是它与曲面 G x y z 0 的交线 由方程组 z f x y G x y z Www ecAIBEi coM 0 消去 z 即 G x y f x y 0 看

    2026年3月20日
    2
  • phpmyadmin的初始账号密码是多少

    phpmyadmin的初始账号密码是多少问这个问题 是不是有点弱智 但是这个问题确实阻塞了我那么几分钟 实际上问题很简单 初始账号是 root 密码为空

    2026年3月16日
    2
  • 罗马字符转整数(python)

    罗马字符转整数(python)力扣:罗马字符转整数(python实现)难度:简单

    2026年4月17日
    3
  • 1进程 ppid_PPID · 理解Linux进程 · 看云

    1进程 ppid_PPID · 理解Linux进程 · 看云PPID 每个进程除了一定有 PID 还会有 PPID 也就是父进程 ID 通过 PPID 可以找到父进程的信息 为什么进程都会有父进程 ID 呢 因为进程都是由父进程衍生出来的 后面会详细介绍几种衍生的方法 那么跟人类起源问题一样 父进程的父进程的父进程又是什么呢 实际上有一个 PID 为 1 的进程是由内核创建的 init 进程 其他子进程都是由它衍生出来 所以前面的描述并不准确 进程号为 1 的进程并没有 PPID 因

    2026年3月18日
    2
  • VSCode编程插件Cline教程(超详细):安装、配置、使用教程、常见使用示例

    VSCode编程插件Cline教程(超详细):安装、配置、使用教程、常见使用示例

    2026年3月16日
    2
  • MATLAB函数句柄

    MATLAB函数句柄之前一直在用,也知道这么个东西,但是没怎么总结。感觉matlab函数句柄就是c语言里面的函数指针,在matlab里面叫它handle,句柄嘛,有了它就可以操纵这个对象(这里也可以叫做函数),这个概念其实可以推广到很多东西,图形fig,自定义函数句柄(也就是下面将会展示的),matlab自带函数句柄,以及某些函数返回的函数句柄,某些类对象或者表达式,也可以叫做句柄。1、何为函数句柄?函数句柄…

    2022年7月17日
    16

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号