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 相关文章推荐
使用Python3中的gettext模块翻译Python源码以支持多语言
Mar 31 Python
Python计算已经过去多少个周末的方法
Jul 25 Python
python文件的md5加密方法
Apr 06 Python
深入理解Python中range和xrange的区别
Nov 26 Python
Python使用matplotlib实现绘制自定义图形功能示例
Jan 18 Python
python爬取m3u8连接的视频
Feb 28 Python
在Python中os.fork()产生子进程的例子
Aug 08 Python
python+mysql实现个人论文管理系统
Oct 25 Python
pytorch中tensor.expand()和tensor.expand_as()函数详解
Dec 27 Python
通过python检测字符串的字母
Feb 18 Python
Spark处理数据排序问题如何避免OOM
May 21 Python
利用Python的folium包绘制城市道路图的实现示例
Aug 24 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 高手之路(二)
2006/10/09 PHP
PHP中3种生成XML文件方法的速度效率比较
2012/10/06 PHP
php多文件上传实现代码
2014/02/20 PHP
WordPress中"无法将上传的文件移动至"错误的解决方法
2015/07/01 PHP
基于jquery完美拖拽,可返回拖动轨迹
2012/03/29 Javascript
让jQuery与其他JavaScript库并存避免冲突的方法
2013/12/23 Javascript
dreamweaver 8实现Jquery自动提示
2014/12/04 Javascript
Node.js中的流(Stream)介绍
2015/03/30 Javascript
详解JavaScript函数
2015/12/01 Javascript
jquery+ajax实现直接提交表单实例分析
2016/06/17 Javascript
BootStrap中的表单大全
2016/09/07 Javascript
基于Vuejs框架实现翻页组件
2020/06/29 Javascript
详解webpack进阶之插件篇
2017/07/06 Javascript
javaScript动态添加Li元素的实例
2018/02/24 Javascript
layui之select的option叠加问题的解决方法
2018/03/08 Javascript
微信小程序云开发之使用云存储
2019/05/17 Javascript
小程序组件之自定义顶部导航实例
2019/06/12 Javascript
JavaScript中CreateTextFile函数
2020/08/30 Javascript
Python爬取国外天气预报网站的方法
2015/07/10 Python
Python对文件操作知识汇总
2016/05/15 Python
NetworkX之Prim算法(实例讲解)
2017/12/22 Python
python实现括号匹配的思路详解
2018/08/23 Python
python求质数列表的例子
2019/11/24 Python
django xadmin action兼容自定义model权限教程
2020/03/30 Python
Windows下PyCharm配置Anaconda环境(超详细教程)
2020/07/31 Python
Python 实现二叉查找树的示例代码
2020/12/21 Python
X/HTML5 和 XHTML2
2008/10/17 HTML / CSS
Html5实现二维码扫描并解析
2016/01/20 HTML / CSS
Pam & Gela官网:美国性感前卫女装品牌
2018/07/19 全球购物
高级Java程序员面试要点
2013/08/02 面试题
酒店实习个人鉴定
2013/12/07 职场文书
校本教研工作方案
2014/01/14 职场文书
人力资源部门的主要职能
2014/02/22 职场文书
企业节能减排实施方案
2014/03/19 职场文书
汤姆索亚历险记读书笔记
2015/06/29 职场文书
Flutter Navigator 实现路由传递参数
2022/04/22 Java/Android