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实现遍历目录的方法【测试可用】
Mar 22 Python
Python 常用的安装Module方式汇总
May 06 Python
python 接口_从协议到抽象基类详解
Aug 24 Python
Python实现压缩和解压缩ZIP文件的方法分析
Sep 28 Python
Python基于多线程操作数据库相关问题分析
Jul 11 Python
tensorflow 恢复指定层与不同层指定不同学习率的方法
Jul 26 Python
pycharm打开命令行或Terminal的方法
Jan 16 Python
python实现在线翻译功能
Mar 03 Python
Python Numpy中数据的常用保存与读取方法
Apr 01 Python
Python self用法详解
Nov 28 Python
python实现三次密码验证的示例
Apr 29 Python
详解python的异常捕获
Mar 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使用Jpgraph创建折线图效果示例
2017/02/15 PHP
PHP使用SMTP邮件服务器发送邮件示例
2018/08/28 PHP
Javascript倒计时代码
2010/08/12 Javascript
jquery插件之easing使用
2010/08/19 Javascript
javascript 获取所有id中包含某关键字的控件的实现代码
2010/11/25 Javascript
一个分享按钮的插件使用介绍(可扩展,内附开发制作流程)
2011/09/19 Javascript
iframe子页面获取父页面元素的方法
2013/11/05 Javascript
extjs4 treepanel动态改变行高度示例
2013/12/17 Javascript
捕获和分析JavaScript Error的方法
2014/03/25 Javascript
AngularJs Javascript MVC 框架
2016/06/20 Javascript
vuejs在解析时出现闪烁的原因及防止闪烁的方法
2016/09/19 Javascript
Angular.js实现注册系统的实例详解
2016/12/18 Javascript
js自定义弹框插件的封装
2020/08/24 Javascript
Vue拖拽组件开发实例详解
2018/05/11 Javascript
解决vuejs项目里css引用背景图片不能显示的问题
2018/09/13 Javascript
详解Vue This$Store总结
2018/12/17 Javascript
node.js express框架简介与实现
2019/07/23 Javascript
layui 解决富文本框form表单提交为空的问题
2019/10/26 Javascript
[01:12](回顾)DOTA2国际邀请赛,全世界DOTAer的盛宴
2014/07/01 DOTA
python正则表达式判断字符串是否是全部小写示例
2013/12/25 Python
python Crypto模块的安装与使用方法
2017/12/21 Python
用TensorFlow实现lasso回归和岭回归算法的示例
2018/05/02 Python
对numpy.append()里的axis的用法详解
2018/06/28 Python
Tensorflow的常用矩阵生成方式
2020/01/04 Python
浅析Python 序列化与反序列化
2020/08/05 Python
浅谈Html5移动端ios/Android兼容性总结
2018/06/01 HTML / CSS
贝玲妃英国官网:Benefit英国
2018/02/03 全球购物
体验完美剃须:The Art of Shaving
2018/08/06 全球购物
可爱的童装和鞋子:Fabkids
2019/08/16 全球购物
英国比较机场停车场网站:Airport Parking Essentials
2019/12/01 全球购物
写出程序把一个链表中的接点顺序倒排
2014/04/28 面试题
五一服装活动方案
2014/01/11 职场文书
工作个人的自我评价
2014/01/14 职场文书
六查六看自查报告
2014/10/14 职场文书
祝寿主持词
2015/07/02 职场文书
MySQL 角色(role)功能介绍
2021/04/24 MySQL