Python3 实现减少可调用对象的参数个数


Posted in Python onDecember 20, 2019

问题

一个被其他python代码使用的callable对象,可能是一个回调函数或者是一个处理器,由于其参数太多,导致调用时出错。

解决方案

如果需要减少某个函数的参数个数,可以使用functools.partial() 。 partial() 函数允许给一个或多个参数设置固定的值,减少接下来被调用时的参数个数。 假设一个函数有很多参数:

def func(a, b, c, d):
  print(a, b, c, d)

使用 partial() 函数来固定某些参数值:

from functools import partial

s1 = partial(func, 1) # a = 1
print(s1(2, 3, 4))
(1, 2, 3, 4)

s2 = partial(func, d=100)  # d = 100
print(s2(1, 2, 3))
(1, 2, 3, 100)

s3 = partial(func, 1, 2, d=100) # a = 1, b = 2, d = 100
print(s3(3))
(1, 2, 3, 100)

可以看出 partial()函数固定某些参数,并返回一个新的callable对象。这个新的callable接受未赋值的参数, 然后跟之前已经赋值过的参数合并起来,最后将所有参数传递给原始函数。

讨论

假设有一个点的列表points,表示(x, y)坐标元组。现在需要以点(4, 3)为基点,根据点和基点之间的距离来排序points中所有的点。

定义一个函数,用来计算两点之间的距离:

import math

points = [(1, 2), (3, 4), (5, 6), (7, 8)]
pt = (4, 3)

def distance(p1, p2):
  x1, y1 = p1
  x2, y2 = p2
  return math.hypot(x2 - x1, y2 - y1)

列表的 sort() 排序方法,可以接受一个关键字参数,设置自定义排序的逻辑, 但是它只能接受一个单个参数的函数,很显然,distance()函数不符合条件,通过使用 partial() 函数可以解决这个问题:

points.sort(key=partial(distance, pt))
print(points)
[(3, 4), (1, 2), (5, 6), (7, 8)]

很多时候 partial() 能实现的效果,其实,lambda表达式也能实现。

points.sort(key=lambda x: distance(pt, x))
print(points)
[(3, 4), (1, 2), (5, 6), (7, 8)]

以上这篇Python3 实现减少可调用对象的参数个数就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中的__new__与__init__魔术方法理解笔记
Nov 08 Python
详解python中 os._exit() 和 sys.exit(), exit(0)和exit(1) 的用法和区别
Jun 23 Python
浅析Python中的赋值和深浅拷贝
Aug 15 Python
django中的setting最佳配置小结
Nov 21 Python
Python实现一个服务器监听多个客户端请求
Apr 12 Python
Mac下Anaconda的安装和使用教程
Nov 29 Python
Python 给屏幕打印信息加上颜色的实现方法
Apr 24 Python
浅谈Python中函数的定义及其调用方法
Jul 19 Python
Numpy 中的矩阵求逆实例
Aug 26 Python
Pandas把dataframe或series转换成list的方法
Jun 14 Python
在python中对于bool布尔值的取反操作
Dec 11 Python
Python的三个重要函数详解
Jan 18 Python
python获取引用对象的个数方式
Dec 20 #Python
Python 获取命令行参数内容及参数个数的实例
Dec 20 #Python
python 读写文件包含多种编码格式的解决方式
Dec 20 #Python
pandas 中对特征进行硬编码和onehot编码的实现
Dec 20 #Python
使用python3批量下载rbsp数据的示例代码
Dec 20 #Python
Python使用QQ邮箱发送邮件报错smtplib.SMTPAuthenticationError
Dec 20 #Python
Python字符串、列表、元组、字典、集合的补充实例详解
Dec 20 #Python
You might like
最令PHP初学者们头痛的十四个问题
2007/01/15 PHP
JQuery 选项卡效果(JS与HTML的分离)
2010/04/01 Javascript
javascript拖拽上传类库DropzoneJS使用方法
2013/12/05 Javascript
关闭时刷新父窗口两种方法
2014/05/07 Javascript
jQuery照片伸缩效果不影响其他元素的布局
2014/05/09 Javascript
ff chrome和ie下全局动态定位的异同及全局高度的取法
2014/06/30 Javascript
javascript中innerText和innerHTML属性用法实例分析
2015/05/13 Javascript
Validform表单验证总结篇
2016/10/31 Javascript
微信小程序进行微信支付的步骤昂述
2016/12/01 Javascript
JavaScript调试的多个必备小Tips
2017/01/15 Javascript
vue中子组件向父组件传递数据的实例代码(实现加减功能)
2018/04/20 Javascript
用Object.prototype.toString.call(obj)检测对象类型原因分析
2018/10/11 Javascript
JavaScript之解构赋值的理解
2019/01/30 Javascript
JavaScript函数式编程(Functional Programming)声明式与命令式实例分析
2019/05/21 Javascript
Vue项目实现换肤功能的一种方案分析
2019/08/28 Javascript
JS实现简单随机3D骰子
2019/10/24 Javascript
原生js实现无缝轮播图
2020/01/11 Javascript
python处理csv中的空值方法
2018/06/22 Python
Sanic框架蓝图用法实例分析
2018/07/17 Python
python中时间、日期、时间戳的转换的实现方法
2019/07/06 Python
结合OpenCV与TensorFlow进行人脸识别的实现
2019/10/10 Python
python 实现保存最新的三份文件,其余的都删掉
2019/12/22 Python
实现ECharts双Y轴左右刻度线一致的例子
2020/05/16 Python
Python类绑定方法及非绑定方法实例解析
2020/10/09 Python
基于python获取本地时间并转换时间戳和日期格式
2020/10/27 Python
加拿大休闲和工业服装和鞋类零售商:L’Équipeur
2018/01/12 全球购物
2019年.net常见面试问题
2012/02/12 面试题
设计毕业生简历中的自我评价
2013/10/01 职场文书
体育学院毕业生自荐信
2013/11/03 职场文书
市场总经理岗位职责
2014/04/11 职场文书
客服专员岗位职责
2015/02/10 职场文书
2015年学习部工作总结范文
2015/03/31 职场文书
酒店财务总监岗位职责
2015/04/03 职场文书
资金申请报告范文
2015/05/14 职场文书
Python实现socket库网络通信套接字
2021/06/04 Python
Python合并pdf文件的工具
2021/07/01 Python