partial函数介绍

partial函数在python的functools模块中,这个函数原型如下:
partial(func, *args, **keywords)

这个函数调用时,返回一个partial对象,partial对象类似于带有位置参数args和关键字参数keywords的func对象。如果有更多的参数提供时,它们加在args后面,如果提供了额外的关键字参数,它们会扩展和覆盖关键字参数,大致相当于

def partial(func, /, *args, **keywords):def newfunc(*fargs, **fkeywords):newkeywords = {**keywords, **fkeywords}return func(*args, *fargs, **newkeywords)newfunc.func = funcnewfunc.args = argsnewfunc.keywords = keywordsreturn newfunc

partial函数用于partial function application,partial function application是指的:固定函数参数及关键字的某些部分,生成一个具有简化签名的新对象。

如果看到这里还是一脸懵,那么举个例子,就很容易明白了:

int()函数可以把字符串转换为整数,当仅传入字符串时,int()函数默认按十进制转换,int()函数提供了base参数,默认值为10,如果传入base参数为N,就可以做N进制的转换。

>>> int('10')
10>>> int('10', base=2)
2

如果我们想要默认按二进制转换的类似int的函数,这时候就可以利用partial

>>> from functools import partial
>>> int2 = partial(int, base=2)
>>> int2('10')
2
>>>

那这样做的好处是什么?
如果我们每次都使用传入base参数的方式,当转换大量的二进制字符串时,每次都使用int(‘10’, base=2)会非常麻烦,毕竟多传了一个参数。

可以看出来functools.partial的作用就是,把一个函数的某些参数给固定住(也就是设置默认值),然后返回一个新的函数,再调用这个新函数时,参数会减少,使用会更简单。

更多的例子

定义一个函数less,该函数有两个参数a,b,函数的作用令a缩小为原来的1/b.

利用partial函数,设置默认缩小为原来的1/10的函数。

from functools import partialdef less(a, b):return a/bless10 = partial(less, b=10)
print(less10(10))

那么,当我们相对一个list进行上述操作的时候,怎么办?我们很容易可以想到用循环的方式,其实还有一个更好的方法,就是使用map函数。

map(function,iterable,…)
返回一个迭代器,它将函数应用于iterable的每个项目,并产生结果。如果传递了额外的可迭代参数,则 函数必须接受那么多参数并并行应用于所有可迭代的项目。对于多个可迭代对象,迭代器会在最短的可迭代对象耗尽时停止。

map()函数第一个参数接受一个函数名,后面的参数接受一个或多个可迭代的序列。map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回。**当传入多个可迭代的序列时,传入的第一个函数必须对应有与序列个数一致的参数,相当于序列依次传入函数中。**关于map函数更多的内容,参考:https://zhuanlan.zhihu.com/p/205466485

具体实现如下:

a = [1, 2, 3, 4]
res = list(map(less10, a))
print(res)

打印下结果:

这时候看,代码的可读性是不是变高了。

参考链接:
https://blog.csdn.net/zhongbeida_xue/article/details/78973936
https://www.cnblogs.com/jdwfff/p/10519368.html
https://blog.csdn.net/qq_42832858/article/details/85238601

partial函数介绍(含代码示例)相关推荐

  1. python简单代码画曲线图教程-Python绘制折线图和散点图的详细方法介绍(代码示例)...

    本篇文章给大家带来的内容是关于Python绘制折线图和散点图的详细方法介绍(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 1.绘制折线图和散点图要用到matplotlib ...

  2. python画折线图代码-Python绘制折线图和散点图的详细方法介绍(代码示例)

    本篇文章给大家带来的内容是关于Python绘制折线图和散点图的详细方法介绍(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 1.绘制折线图和散点图要用到matplotlib ...

  3. Ajax异步请求(重渲染DOM元素时,如何自动调用并执行JS自定义函数【含代码】)- 案例篇

    文章目录 Ajax异步请求(重渲染DOM元素时,如何自动调用并执行JS自定义函数[含代码])- 案例篇 效果截图: 重要代码: 附:全部HTML代码: Ajax异步请求(重渲染DOM元素时,如何自动调 ...

  4. OpenCV函数用法详解21~30,含代码示例,可直接运行

    opencv3 文章目录 opencv3 1.图像加权和 2.图像加密与解密 3.数字水印 4.色彩空间类型转换 5.dst = cv2.inRange(src, lowerb, upperb) 6. ...

  5. php中使用mysql的视图_MYSQL中视图的用法介绍(代码示例)

    本篇文章给大家带来的内容是关于MYSQL中视图的用法介绍(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 1.什么是视图 执行一条SQL,将结果集保存在一张虚拟表中 (相关 ...

  6. predicate java_java8中predicate的用法介绍(代码示例)

    本篇文章给大家带来的内容是关于java8中predicate的用法介绍(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 传递代码 我们首先看一个例子,假设你有一个 Appl ...

  7. mysql统计数据的代码_MySQL按时间统计数据的方法介绍(代码示例)

    本篇文章给大家带来的内容是关于MySQL按时间统计数据的方法介绍(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 在做数据库的统计时,经常会需要根据年.月.日来统计数据,然 ...

  8. python解方程代码_Python解方程的技巧介绍(代码示例)

    本篇文章给大家带来的内容是关于Python解方程的技巧介绍(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. numpy numpy 用来解方程的话有点复杂,需要用到矩阵的思 ...

  9. STC89C52单片机DS1302介绍以及代码示例

    目录 DS1302介绍 引脚定义与应用电路 内部结构框架图 寄存器定义 时序定义 BCD码 时间设置上的一些问题 代码示例: DS1302介绍 DS1302是由美国DALLAS公司推出的具有涓细电流充 ...

最新文章

  1. 类的赋值运算符的重载函数
  2. wordpress-4.4.1 数据库表结构详解
  3. self studying room list available at campus
  4. Qt for Android Splash启动页最简单延时关闭
  5. OpenGL渲染纹理和平面反射
  6. 转行AI成功的秘诀只有一个,那就是……
  7. Oracle笔记:备份还原
  8. postgres 把一个表的值转成另一个表的字段名_Postgres索引那些事
  9. python壁纸数据抓取_python 多线程爬取壁纸网站的示例
  10. Linux-环境变量的设置和查看
  11. mysql repalication_MYSQL数据库知识点总结
  12. Split Animation Clip From FBX and Multiply Mode Sprite
  13. rcmd–App Switcher for Mac快速切换应用程序
  14. IOS开发自定义tableviewcell的注意点
  15. UTrust4701F双界面NFC读写器读卡器测试软件读写NFC电子标签的文本|网址|电子名片|智能海报|蓝牙地址内容操作说明
  16. 常见的激励函数和损失函数
  17. maya动画镜像_Maya
  18. 【离散数学】p^q^r为什么既是合取范式又是析取范式
  19. 【linux】查看服务器的GPU 谁(用户)在使用
  20. [精选]大学生实习报告怎么写?

热门文章

  1. 计算机信息安全技术第一章小知识点
  2. 数学建模还原纸片matlab程序,碎纸片的拼接复原问题大学生数学建模全国一等奖论文.doc...
  3. 【python】实验题
  4. matlab遗传算法(例题及代码)
  5. 【Windows Server 2019】邮件服务器配置与管理——安装及配置Winmail服务器(上)
  6. muduo学习笔记:net部分之实现TCP网络编程库-Acceptor
  7. MATLAB基础学习篇:#3 矩阵和数组
  8. 零基础考二级python大概需要拿出多长时间?
  9. CSS3之解决相邻border重合加粗问题
  10. STM32用SPI方式控制OLED模块