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中用Ctrl+C终止多线程程序的问题解决
Mar 30 Python
python常规方法实现数组的全排列
Mar 17 Python
Python基于pandas实现json格式转换成dataframe的方法
Jun 22 Python
浅谈python连续赋值可能引发的错误
Nov 10 Python
Python实现将蓝底照片转化为白底照片功能完整实例
Dec 13 Python
python tkinter之 复选、文本、下拉的实现
Mar 04 Python
python环境下安装opencv库的方法
Mar 05 Python
使用python实现CGI环境搭建过程解析
Apr 28 Python
Python 字典中的所有方法及用法
Jun 10 Python
Python Socket TCP双端聊天功能实现过程详解
Jun 15 Python
python实现斗地主分牌洗牌
Jun 22 Python
利用python+request通过接口实现人员通行记录上传功能
Jan 13 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 ADODB使用方法集锦
2008/03/25 PHP
使用PHP备份MYSQL数据的多种方法
2014/01/15 PHP
php密码生成类实例
2014/09/24 PHP
ThinkPHP控制器里javascript代码不能执行的解决方法
2014/11/22 PHP
ThinkPHP打开验证码页面显示乱码的解决方法
2014/12/18 PHP
PHP开发中csrf攻击的简单演示和防范
2017/05/07 PHP
php设计模式之观察者模式实例详解【星际争霸游戏案例】
2020/03/30 PHP
彪哥1.1(智能表格)提供下载
2006/09/07 Javascript
Riot.js 快速的JavaScript单元测试框架
2009/11/09 Javascript
推荐10个超棒的jQuery工具提示插件
2011/10/11 Javascript
autoPlay 基于jquery的图片自动播放效果
2011/12/07 Javascript
js自动闭合html标签(自动补全html标记)
2012/10/04 Javascript
使用javascript实现有效时间的控制,并显示将要过期的时间
2014/01/02 Javascript
javascript删除数组元素并且数组长度减小的简单实例
2014/02/14 Javascript
js 去除字符串第一位逗号的方法
2014/06/07 Javascript
Ionic实现仿通讯录点击滑动及$ionicscrolldelegate使用分析
2016/01/18 Javascript
利用nodeJs anywhere搭建本地服务器环境的方法
2018/05/12 NodeJs
图解JS原型和原型链实现原理
2020/09/15 Javascript
在Python中实现贪婪排名算法的教程
2015/04/17 Python
python logging重复记录日志问题的解决方法
2018/07/12 Python
使用Python制作自动推送微信消息提醒的备忘录功能
2018/09/06 Python
Python面向对象之类的定义与继承用法示例
2019/01/14 Python
python实现感知机线性分类模型示例代码
2019/06/02 Python
Python分类测试代码实例汇总
2020/07/23 Python
PyCharm 2020.1版安装破解注册码永久激活(激活到2089年)
2020/09/24 Python
python绘图pyecharts+pandas的使用详解
2020/12/13 Python
使用HTML5原生对话框元素并轻松创建模态框组件
2019/03/06 HTML / CSS
迷你唐卡软皮鞋:Minnetonka Moccasin
2018/05/01 全球购物
俄罗斯电动工具和设备购物网站:Vseinstrumenti.ru
2020/11/12 全球购物
什么是servlet
2012/05/08 面试题
《中国梦我的梦》大学生演讲稿
2014/08/20 职场文书
终止劳动合同证明书样本
2014/11/19 职场文书
2014年纪委工作总结
2014/12/05 职场文书
2015年五一劳动节演讲稿
2015/03/18 职场文书
学校工会工作总结2015
2015/05/19 职场文书
Python中Numpy和Matplotlib的基本使用指南
2021/11/02 Python