Python的偏函数(Partial Function Application)

这个概念说实话以前听过,但没深究过,也没用到过…但是被人问到了,就查来记录一下。

查下资料,发现这个东西说白了就是:部分参数有默认值的函数,Orz。再回过头来看他的英文名字,partial function application,emm,可以理解了。至于中文的偏是怎么来的,我也不知道。

再看官方的定义:

作用是在函数调用前,预先固定参数的方法。

为什么发明这个东西?

  • 少传参数
  • 更短
  • 更简洁

说白了都是一个事情……

那么先看一下,如果我们自己要实现这个功能,会怎么搞?

看下面这个例子

In [105]: def test(x, y):
     ...:     return x*y
     ...:
     ...:

In [106]: test(2, 3)
Out[106]: 6

In [107]: def test(x, y=2):
     ...:     return x*y
     ...:

In [108]: test(2)
Out[108]: 4

很简单,对不?

那有没有现成的办法呢?当然有,那就是functools库

In [109]: from functools import partial

In [110]: def test(x, y):
     ...:     return x*y
     ...:

In [111]: new_test = partial(test, y=3)

In [112]: new_test(3)
Out[112]: 9

就这么一个小东西…

那么他有其他的好处么?

有,复用性更强了。

比方说如果想把y默认值再改成4,不用自己再去些一个 def test(x, y=4),可以直接声明一个继续用了。

参考:

Original: https://www.cnblogs.com/wswang/p/13175770.html
Author: wswang
Title: Python的偏函数(Partial Function Application)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/585801/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • cpp创建对象的多种形式

    1 使用非默认构造函数来创建对象的几种形式 Person person = Person("binny1", 26); 这种方式创建对象,C++标准允许编译器使…

    Linux 2023年6月13日
    0178
  • docker image ls 提示 “Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock

    现象描述 上次在统信Linux上费了很大力气才装上docker,当时记得是可以用了。但今天登录系统后执行 docker image ls却提示上面的问题,但切换到root账户再执行…

    Linux 2023年6月8日
    0103
  • Linux vim退出命令

    :w – 保存文件,不退出 vim:w file -将修改另外保存到 file 中,不退出 vim:w! -强制保存,不退出 vim:wq -保存文件,退出 vim:w…

    Linux 2023年6月13日
    093
  • 小公司比较吃亏的两道微服务面试题

    其实选择工作的时候,很多技术牛人都会选择一些小而美的公司,技术全面,能够以一个更全面的视角看整个公司的运作,人和人之间的相处也很简单。但是,有两道微服务的面试题,小公司的朋友们会比…

    Linux 2023年6月14日
    0108
  • jmeter接口关联-后置处理器(正则表达式)

    接口测试通过会涉及到两个接口之间的关联,前一个接口的返回数据作为到下一个接口的入参,这时候就需要用到后置处理器,其中有正则表达式提取器、XPath提取器、JSON提取器,今天先示范…

    Linux 2023年6月8日
    087
  • 复古冰雪传奇H5游戏详细图文架设教程

    前言 想体验复古传奇的热血PK吗?想体验满级VIP的尊贵吗?想体验一刀99999的爽快吗?各种极品炫酷时装、坐骑、翅膀、宠物通通给你,就在复古冰雪传奇H5! 本文讲解冰雪传奇架设教…

    Linux 2023年6月7日
    0112
  • 字节 字符 位(比特)

    位(bit):binary digit,计算机储存的最小单位,n个比特可以确定2^n个情况,如11010100为8位。 字节(byte):一个字节储存8位无符号数,范围为0-225…

    Linux 2023年6月13日
    0107
  • CentOS单机安装k8s并部署.NET 6程序 压测 记录

    前面部分依照CentOS单机安装k8s并部署.NET 6程序来进行,内存、cpu、centos版本一致,之前222元买的三年8M 2c4g 腾讯云轻量服务器,这个教程算是写的很详细…

    Linux 2023年6月7日
    0106
  • shell脚本中 /dev/null 的用途

    /dev/null 是一个特殊的设备文件,它丢弃一切写入其中的数据 可以将它 视为一个黑洞, 它等效于只写文件, 写入其中的所有内容都会消失, 尝试从中读取或输出不会有任何结果,同…

    Linux 2023年6月13日
    098
  • podman

    podman Podman 是一个无守护程序、开源的 Linux 原生工具,旨在使用开放容器计划 (OCI) 容器和容器映像轻松查找、运行、构建、共享和部署应用程序。Podman …

    Linux 2023年6月7日
    071
  • ABCD四个顺序执行方法,拓展性延申

    今天在群里,有人问 有几个void返回值&amp…

    Linux 2023年6月7日
    0131
  • oracle删除超过N天数据脚本

    公司内做的项目是工厂内的,一般工厂内数据要求的是实时性,很久之前的数据可以自行删除处理,我们数据库用的oracle,所以就想着写一个脚本来删除,这样的话,脚本不管放在那里使用都可以…

    Linux 2023年6月7日
    0119
  • 位运算(一)

    位运算的一般应用 功能 例子 运算 去掉最后一位 1110101->111010 x>>1 在最后加0 1110101->11101010 x< 通过…

    Linux 2023年6月8日
    0142
  • python 结构(序列分解)

    一、结构 结构的主要作用是将一个序列分解成若干个单独的变量。 1、对列表进行分解 2、对元组进行分解 3、对字典进行分解 4、对集合进行分解 5、对字符串进行分解 6、对文件句柄进…

    Linux 2023年6月7日
    098
  • Docker安装 Ubuntu Centos

    Ubuntu 安装Dokcer 1. 删除旧版本Docker安装包和依赖项 sudo apt-get remove docker docker-engine docker.io c…

    Linux 2023年6月13日
    088
  • C语言—>指针

    当两个指针 p1, p2相减时, p2-p1就是从 p1到 p2,不包含 p2的元素个数,结果的类型是 ptrdiff_t #include int main() { int a[…

    Linux 2023年6月8日
    089
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球