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实现SVN的目录周期性备份实例
Jul 17 Python
深入解析Python中的urllib2模块
Nov 13 Python
简单学习Python time模块
Apr 29 Python
Python获取某一天是星期几的方法示例
Jan 17 Python
tensorflow建立一个简单的神经网络的方法
Feb 10 Python
python 爬虫 批量获取代理ip的实例代码
May 22 Python
numpy创建单位矩阵和对角矩阵的实例
Nov 29 Python
django列表筛选功能的实现代码
Mar 27 Python
tensorflow之读取jpg图像长和宽实例
Jun 18 Python
使用Python将语音转换为文本的方法
Aug 10 Python
matplotlib相关系统目录获取方式小结
Feb 03 Python
如何用python清洗文件中的数据
Jun 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创建桌面快捷方式的实例代码
2014/02/17 PHP
取得单条网站评论以数组形式进行输出
2014/07/28 PHP
phpmyadmin提示The mbstring extension is missing的解决方法
2014/12/17 PHP
Gambit vs ForZe BO3 第一场 2.13
2021/03/10 DOTA
HTML中Select不用Disabled实现ReadOnly的效果
2008/04/07 Javascript
jquery的颜色选择插件实例代码
2008/10/02 Javascript
jquery下json数组的操作实现代码
2010/08/09 Javascript
jQuery UI AutoComplete 使用说明
2011/06/20 Javascript
对jQuery的事件绑定的一些思考(补充)
2013/04/20 Javascript
JavaScript 函数参数是传值(byVal)还是传址(byRef) 分享
2013/07/02 Javascript
ie中js创建checkbox默认选中问题探讨
2013/10/21 Javascript
关于延迟加载JavaScript
2015/05/05 Javascript
使用vue.js开发时一些注意事项
2016/04/27 Javascript
jQuery+ajax简单实现文件上传的方法
2016/06/03 Javascript
浅析Javascript ES6中的原生Promise
2016/08/25 Javascript
微信小程序左右滑动切换页面详解及实例代码
2017/02/28 Javascript
基于BootStrap的前端分页带省略号和上下页效果
2017/05/18 Javascript
JS实现定时任务每隔N秒请求后台setInterval定时和ajax请求问题
2017/10/15 Javascript
Three.js加载外部模型的教程详解
2017/11/10 Javascript
vue使用iframe嵌入网页的示例代码
2020/06/09 Javascript
vue如何截取字符串
2019/05/06 Javascript
jquery分页优化操作实例分析
2019/08/23 jQuery
Javascript 关于基本类型和引用类型的个人理解
2019/11/01 Javascript
JS控制只能输入数字并且最多允许小数点两位
2019/11/24 Javascript
使用nodeJS中的fs模块对文件及目录进行读写,删除,追加,等操作详解
2020/02/06 NodeJs
python实现备份目录的方法
2015/08/03 Python
python实现统计文本中单词出现的频率详解
2019/05/20 Python
numpy库与pandas库axis=0,axis= 1轴的用法详解
2019/05/27 Python
Python列表操作方法详解
2020/02/09 Python
Python捕获异常堆栈信息的几种方法(小结)
2020/05/18 Python
Python 删除List元素的三种方法remove、pop、del
2020/11/16 Python
美国精品家居用品网站:US-Mattress
2016/08/24 全球购物
英国折扣高尔夫商店:Discount Golf Store
2019/11/19 全球购物
飞利浦西班牙官方网站:Philips西班牙
2020/02/17 全球购物
2014年公务员退休工资改革方案
2014/10/01 职场文书
2015年英语教师工作总结
2015/05/20 职场文书