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代码写的12306订票代码
Dec 20 Python
python 系统调用的实例详解
Jul 11 Python
Python+matplotlib绘制不同大小和颜色散点图实例
Jan 19 Python
浅谈Python中的zip()与*zip()函数详解
Feb 24 Python
python自动查询12306余票并发送邮箱提醒脚本
May 21 Python
Python采集猫眼两万条数据 对《无名之辈》影评进行分析
Dec 05 Python
Python判断变量名是否合法的方法示例
Jan 28 Python
python批量修改图片尺寸,并保存指定路径的实现方法
Jul 04 Python
django 实现celery动态设置周期任务执行时间
Nov 19 Python
怎么解决pycharm license Acti的方法
Oct 28 Python
浅析Python打包时包含静态文件处理方法
Jan 15 Python
浅析python字符串前加r、f、u、l 的区别
Jan 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
Extended CHM PHP 语法手册之 DIY
2006/10/09 PHP
PHP简洁函数(PHP简单明了函数语法)
2012/06/10 PHP
探讨:如何通过stats命令分析Memcached的内部状态
2013/06/14 PHP
php多用户读写文件冲突的解决办法
2013/11/06 PHP
PHP、Nginx、Apache中禁止网页被iframe引用的方法
2020/10/01 PHP
php curl登陆qq后获取用户信息时证书错误
2015/02/03 PHP
详解PHP中instanceof关键字及instanceof关键字有什么作用
2015/11/05 PHP
PHP 中魔术常量的实例详解
2017/10/26 PHP
Laravel框架自定义公共函数的引入操作示例
2019/04/16 PHP
Code: write(s,d) 输出连续字符串
2007/08/19 Javascript
thinkphp 表名 大小写 窍门
2015/02/01 Javascript
JavaScript实现为input与textarea自定义hover,focus效果的方法
2015/08/21 Javascript
jQuery左右滚动支持图片放大缩略图图片轮播代码分享
2015/08/26 Javascript
JS基于面向对象实现的拖拽库实例
2015/09/24 Javascript
jquery判断复选框是否被选中的方法
2015/10/16 Javascript
使用SVG基本操作API的实例讲解
2017/09/14 Javascript
python中字典(Dictionary)用法实例详解
2015/05/30 Python
python使用xpath中遇到:到底是什么?
2018/01/04 Python
tensorflow使用神经网络实现mnist分类
2018/09/08 Python
python 字符串常用方法汇总详解
2019/09/16 Python
Matplotlib 绘制饼图解决文字重叠的方法
2020/07/24 Python
python编程的核心知识点总结
2021/02/08 Python
css3圆角样式分享自定义按钮样式
2013/12/27 HTML / CSS
Html5新特性用canvas标签画多条直线附效果截图
2014/06/30 HTML / CSS
美国保健品专家:Life Extension
2018/05/04 全球购物
英国日常交易网站:Wowcher
2018/09/04 全球购物
美国领先的男士和女士内衣购物网站:Freshpair
2019/02/25 全球购物
什么是数组名
2012/05/10 面试题
应用心理学个人求职信范文
2013/12/11 职场文书
厂长助理岗位职责
2013/12/27 职场文书
金融学专科生自我鉴定
2014/02/21 职场文书
2014年党课学习材料
2014/05/11 职场文书
党支部组织生活会整改方案
2014/09/30 职场文书
毕业设计工作总结
2015/08/14 职场文书
动画《朋友游戏》公开佐藤友生绘制的开播纪念绘
2022/04/06 日漫
Redis数据同步之redis shake的实现方法
2022/04/21 Redis