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计算字符宽度的方法
Jun 14 Python
python reduce 函数使用详解
Dec 05 Python
简单了解什么是神经网络
Dec 23 Python
基于Django与ajax之间的json传输方法
May 29 Python
python日志logging模块使用方法分析
May 23 Python
python函数与方法的区别总结
Jun 23 Python
django admin.py 外键,反向查询的实例
Jul 26 Python
python处理自动化任务之同时批量修改word里面的内容的方法
Aug 23 Python
Python 用三行代码提取PDF表格数据
Oct 13 Python
python3.7通过thrift操作hbase的示例代码
Jan 14 Python
python使用OpenCV模块实现图像的融合示例代码
Apr 10 Python
Python os库常用操作代码汇总
Nov 03 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 empty() 检查一个变量是否为空
2011/11/10 PHP
destoon二次开发入门示例
2014/06/20 PHP
php中的异常和错误浅析
2017/05/03 PHP
浅谈使用 Yii2 AssetBundle 中 $publishOptions 的正确姿势
2017/11/08 PHP
基于jQuery的仿flash的广告轮播代码
2010/11/04 Javascript
iframe 父窗口和子窗口相互的调用方法集锦
2010/12/15 Javascript
javascript函数式编程实例分析
2015/04/25 Javascript
Jquery揭秘系列:ajax原生js实现详解(推荐)
2016/06/08 Javascript
jQuery实现的自适应焦点图效果完整实例
2016/08/24 Javascript
基于Three.js插件制作360度全景图
2016/11/29 Javascript
jquery中关于bind()方法的使用技巧分享
2017/03/30 jQuery
详解Vuex管理登录状态
2017/11/13 Javascript
Vue实现搜索 和新闻列表功能简单范例
2018/03/16 Javascript
简单的vuex 的使用案例笔记
2018/04/13 Javascript
bootstrap模态框弹出和隐藏,动态改变中间内容的实例
2018/08/10 Javascript
详解Webpack loader 之 file-loader
2018/11/07 Javascript
vue+node实现图片上传及预览的示例方法
2018/11/22 Javascript
Node使用Selenium进行前端自动化操作的代码实现
2019/10/10 Javascript
解决Layui数据表格显示无数据提示的问题
2019/11/14 Javascript
pygame学习笔记(5):游戏精灵
2015/04/15 Python
python的keyword模块用法实例分析
2015/06/30 Python
django框架如何集成celery进行开发
2017/05/24 Python
Python3 获取一大段文本之间两个关键字之间的内容方法
2018/10/11 Python
对python中的six.moves模块的下载函数urlretrieve详解
2018/12/19 Python
python实现趣味图片字符化
2019/04/30 Python
Python OpenCV 使用滑动条来调整函数参数的方法
2019/07/08 Python
python在openstreetmap地图上绘制路线图的实现
2019/07/11 Python
pytorch 固定部分参数训练的方法
2019/08/17 Python
django日志默认打印request请求信息的方法示例
2020/05/17 Python
物业门卫岗位职责
2013/12/28 职场文书
企业消防安全制度
2014/02/02 职场文书
医院合作协议书
2014/08/19 职场文书
医德医风自我评价2015
2015/03/03 职场文书
创业计划书之零食店(进口)
2019/09/24 职场文书
Redis分布式锁Redlock的实现
2021/08/07 Redis
Elasticsearch 批量操作
2022/04/19 Python