专栏首页小数志Python用了这么久,居然没注意到这个骚操作函数

Python用了这么久,居然没注意到这个骚操作函数

导读

Python语言近年来的火热程度自不必说,这一方面得益于其庞大的第三方库的加持,使得其堪称万金油般的存在;另一方面也在于其简洁的语法和易用的函数。是的,Python语法之简洁和函数之丰富,使得众多Python爱好者常常调侃一句:人生苦短,我用Python。鉴于此,今天本文就来分享一个Python中实用而又略显骚气的函数——partial!

Python语言中的partial函数是一个高级函数,当我们提及高级函数时,其背后一般隐含着的一层信息是函数式编程。说函数式编程可能并不不是那么人尽皆知,所以这里还有必要先拓展谈一谈编程语言的范式!

当前,编程语言的主流范式可区分以下3种:

  • 面向过程
  • 面向对象
  • 函数式

这里还要再讲一讲什么叫面向对象。面向对象,编程语言中实现的一种特殊语法结构(类),将一类事物(严格来讲,这里用对象object更为贴切,但此处有意避用这一词语)的所有属性和方法封装在一起,就实现了类的定义。而后,通过该类(class)的定义就可创建(new)出具有这些属性和方法的若干实例,这些实例就叫做对象(object)(相当于类是加工厂,对象是加工厂生产的产品,所以类是抽象的,对象是具体的)。值得补充说明的是,前面提到将属性和方法封装成一个类的定义,那么如何区分属性和方法呢?以类的经典案例:Student类来说,属性就是姓名、年龄和身高体重的那些取值,方法则是学习、工作、跑步那些动作。比如在Python中类的属性和方法的明显区别是:属性不带小括号,表示一个变量取值;方法都是带小括号的,表示一个函数,对应一套处理逻辑。

这才叫真正的面向对象编程

理解完类和对象的概念,那么面向对象编程则是指将一类事物封装成类,而后执行操作和查找取值时则使用该类创建的对象来完成,典型画风是这样的:某对象执行什么什么操作,某对象取什么什么属性值,这里都是在用对象来调用方法或属性,体现的思想就是面向对象。

类似地,面向过程编程呢,则是这样的画风:把某些变量输入给一些函数来完成相应操作。这里实现的主体显然是函数,函数不仅要调度这一过程、还要针对具体需求实现相应的处理逻辑,体现的思想就是面向过程;

那么函数式编程呢?则将是这样的画风:不仅把一些变量输入给函数/方法,还把一些执行特定操作的函数也一并作为输入,并由这个函数和变量来完成预定需求,就好像数学中定义的函数那样,指定输入和函数,得到相应的输出。这里的调度交给外面的函数/方法,而具体需求的处理逻辑则交由里面的函数,体现的思想就是函数式。

终于,该言归正传了,partial函数就是Python中的一个高级函数,体现的就是函数式编程思想。那么。partial函数的功能是什么?解决了什么问题,该如何使用?

partial函数封装在python的内置库functools中(从该库的名字就可以推断,这是一批关于函数的工具,但实际上并没有太多常用的函数,曾经有一个reduce现在也不大提倡使用了),用于对一个函数应用部分参数或关键字参数,并返回一个新函数。

实际上,所以这里partial的函数中文名叫部分应用函数,即提供函数的一部分参数,从而简化其后续调用。talk is cheap, show me the code!

def makeAnimal(type_, name, sex, friendly):
    print(f"Generate an animal: type={type_}, name={name}, sex={sex}, friendly={friendly}")

makeAnimal("狗", "二哈", "雄", True)
# 输出:Generate an animal: type=狗, name=二哈, sex=雄, friendly=True

makeDog = partial(makeAnimal, "狗", friendly=True) 
# 基于makeAnimal得到部分应用函数,并分别传入一个参数和关键字参数
# 此时makeDog仅剩下两个参数:name, sex

makeDog("旺财", "雌")
# 输出:Generate an animal: type=狗, name=旺财, sex=雌, friendly=True

最后简单总结一下:partial函数提供了对所接收函数的部分应用功能,常用于对一个参数较多的函数先传入一部分固定的参数,返回一个参数相对精简的新函数,从而更利于后续的调用。本质上,该功能可通过Python中的默认参数等来替代实现,但对于丰富Python语法特性、提高代码工程化水平,partial又何尝不是一个更好的选择呢?

本文分享自微信公众号 - 小数志(Datazhi),作者:luanhz

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-07-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • python圈精选(2020-05-15)

    efonfighting
  • 奇葩程序员:使用python“奇技淫巧”的骚操作,大开眼界

    随着深度学习、机器学习等技术的火热发展,python 作为一种面向对象的动态类型语言也跟着火了起来。 不少计算机科班出身的同学,在大学期间学习的多是 C++或 ...

    汤贤
  • Python骚操作,提取pdf文件中的表格数据!

    在实际研究中,我们经常需要获取大量数据,而这些数据很大一部分以pdf表格的形式呈现,如公司年报、发行上市公告等。面对如此多的数据表格,采用手工复制黏贴的方式显然...

    诸葛青云
  • 《快学 Go 语言》第 3 课 —— 分支与循环

    上面这个等式每一个初学编程的同学都从老师那里听说过。它并不是什么严格的数据公式,它只是对一般程序的简单认知。数据结构是内存数据关系的静态表示,算法是数据结构从一...

    老钱
  • 神爱程序员,于是带来Python

    2018 年 7 月,在 PEP 572(Python 改进提案) 被接受后的第三天,由于仍然不断面对着别人的质疑,反馈意见不断袭来,让这位一手缔造新的编程语言...

    AI科技大本营
  • 亚马逊metdata1

    亚马逊涉及的二次开发是很多程序员的第二个饭碗,但是亚马逊的开发人员也不是盖的,要攻破他们紧密设计出来的东西可不是唾手可得的,想必骚年们必须经历九九八十一难才能取...

    stys35
  • LeCun自曝使用C语言23年之久,2年前才上手Python,还曾短暂尝试Lua

    而上手AI时代最火的语言——Python——则要到2018年,那时候LeCun开始担任Facebook首席AI科学家。

    量子位
  • 绝了!Python又放大招,逆袭宇宙语言!

    自2017年国务院印发《新一代人工智能发展规划》,明确指出在中小学阶段设置人工智能相关课程后,Python一路逆袭, 作为人工智能时代最合适的语言,Python...

    Python之道
  • 绝了!Python又放大招,逆袭宇宙语言!

    自2017年国务院印发《新一代人工智能发展规划》,明确指出在中小学阶段设置人工智能相关课程后,Python一路逆袭, 作为人工智能时代最合适的语言,Python...

    诸葛青云
  • 最新 Java 核心技术教程,都在这了!

    以下是Java技术栈微信公众号发布的所有关于 Java 的技术干货,2021最新更新版,本文会长期更新。

    Java技术栈
  • 卧槽,Java中还可以这么写的吗,秀的飞起

    今天在看python相关的东西,看到各种骚操作,回头想了下Java有没有什么骚操作,整理下面几种,一起看一下吧

    香菜聊游戏
  • 让人想骂街的 Python 炫技操作:条件语句的七种写法

    Python 语言里有许多(而且是越来越多)的高级特性,是 Python 发烧友们非常喜欢的。在这些人的眼里,能够写出那些一般开发者看不懂的高级特性,就是高手,...

    龙哥
  • 亲,你看到这张封面图,竟是用 PyEcharts 画的!信不信?

    嗯,没错,PyEcharts 就是这么骚!嗯,没错,PyEcharts 就是这么骚!

    崔庆才
  • Python是如何怼翻其他编程语言而窜上宝座的

    来PK啊! 谁怕谁啊! 在过去的两年间,Python一路高歌猛进,成功窜上“最火编程语言”的宝座。 ? 更可怕的是,这把火不仅仅是在程序员的圈子里越烧越旺,甚至...

    昱良
  • Python2寿命只剩一个月啦!还不快赶紧学起Python3酷炫到爆的新特性!

    Python3.8已经发布了将近一个月了,距离Python3.0第一个版本发布也将超过10年了。相信很多人还是依旧在使用Python2.7版本,想要迁移到最新版...

    云爬虫技术研究笔记
  • 让人想骂街的 Python 炫技操作:条件语句的七种写法

    Python 语言里有许多(而且是越来越多)的高级特性,是 Python 发烧友们非常喜欢的。在这些人的眼里,能够写出那些一般开发者看不懂的高级特性,就是高手,...

    abs_zero
  • 有的UE画不好PPT,好的测试却靠Python加薪

                     测试开发者的共同关注! 作者:jhouyang,腾讯资深后台开发工程师。 WeTest导读 想要升职加薪,强大的专业能力很...

    WeTest质量开放平台团队
  • 枪口对准Google无人车

    稍微了解无人车发展的人都知道,亚利桑那州是美国无人车政策最友好的测试基地,聚集了大批无人车公司的无人车,也是Waymo无人车试运营、正式商用的第一站。

    量子位
  • 分享 Python 常见面试题及答案(上)

    Java面试题刚发完,后台又有很多Python程序员问,要不要分享一份Python面试题,所以今天刚好分享这份Python面试题,大部分题目属于巩固基础的Pyt...

    程序IT圈

扫码关注云+社区

领取腾讯云代金券