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抓取京东图书评论数据
Aug 31 Python
用Python进行行为驱动开发的入门教程
Apr 23 Python
Django验证码的生成与使用示例
May 20 Python
python3实现TCP协议的简单服务器和客户端案例(分享)
Jun 14 Python
微信跳一跳自动运行python脚本
Jan 08 Python
python如何让类支持比较运算
Mar 20 Python
Python实现处理逆波兰表达式示例
Jul 30 Python
python实现小世界网络生成
Nov 21 Python
使用python去除图片白色像素的实例
Dec 12 Python
python脚本实现mp4中的音频提取并保存在原目录
Feb 27 Python
如何在sublime编辑器中安装python
May 20 Python
python打开音乐文件的实例方法
Jul 21 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
一个ORACLE分页程序,挺实用的.
2006/10/09 PHP
PHP爬虫之百万级别知乎用户数据爬取与分析
2016/01/22 PHP
Symfony模板的快捷变量用法实例
2016/03/17 PHP
thinkPHP5.0框架URL访问方法详解
2017/03/18 PHP
php设计模式之组合模式实例详解【星际争霸游戏案例】
2020/03/27 PHP
json格式化/压缩工具 Chrome插件扩展版
2010/05/25 Javascript
Document:getElementsByName()使用方法及示例
2013/10/28 Javascript
js实现带关闭按钮始终显示在网页最底部工具条的方法
2015/03/02 Javascript
vue.js 获取当前自定义属性值
2017/06/01 Javascript
AngularJS  ng-repeat遍历输出的用法
2017/06/19 Javascript
vue2手机APP项目添加开屏广告或者闪屏广告
2017/11/28 Javascript
详解Webpack + ES6 最新环境搭建与配置
2018/06/04 Javascript
JavaScript使用小插件实现倒计时的方法讲解
2019/03/11 Javascript
vuejs移动端实现div拖拽移动
2019/07/25 Javascript
vue移动端模态框(可传参)的实现
2019/11/20 Javascript
微信小程序实现天气预报功能(附源码)
2020/12/10 Javascript
[02:30]联想杯DOTA2完美世界全国高校联赛—北京站现场
2015/11/16 DOTA
python求素数示例分享
2014/02/16 Python
Python中的descriptor描述器简明使用指南
2016/06/02 Python
python判断字符串编码的简单实现方法(使用chardet)
2016/07/01 Python
关于Python 3中print函数的换行详解
2017/08/08 Python
Python语言实现百度语音识别API的使用实例
2017/12/13 Python
Python延时操作实现方法示例
2018/08/14 Python
HTML5实现晶莹剔透的雨滴特效
2014/05/14 HTML / CSS
日本必酷网络直营店:Biccamera
2019/03/23 全球购物
英语硕士生求职简历的自我评价
2013/10/15 职场文书
后勤主管岗位职责
2014/03/01 职场文书
战略合作协议书范本
2014/04/18 职场文书
离婚协议书格式
2014/11/21 职场文书
优秀班主任工作总结2015
2015/05/25 职场文书
初中政治教学工作总结
2015/08/13 职场文书
2019学校运动会开幕词
2019/05/13 职场文书
Golang 空map和未初始化map的注意事项说明
2021/04/29 Golang
python opencv检测直线 cv2.HoughLinesP的实现
2021/06/18 Python
MySQL中正则表达式(REGEXP)使用详解
2022/07/07 MySQL
JS前端使用canvas实现物体的点选示例
2022/08/05 Javascript