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 ljust rjust center输出
Sep 06 Python
Python操作json数据的一个简单例子
Apr 17 Python
Python之csv文件从MySQL数据库导入导出的方法
Jun 21 Python
对pandas数据判断是否为NaN值的方法详解
Nov 06 Python
Python实现读取txt文件中的数据并绘制出图形操作示例
Feb 26 Python
python中字符串数组逆序排列方法总结
Jun 23 Python
TensorFlow dataset.shuffle、batch、repeat的使用详解
Jan 21 Python
python logging设置level失败的解决方法
Feb 19 Python
Pyspark读取parquet数据过程解析
Mar 27 Python
python 通过exifread读取照片信息
Dec 24 Python
python 使用xlsxwriter循环向excel中插入数据和图片的操作
Jan 01 Python
用Python远程登陆服务器的步骤
Apr 16 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
ezSQL PHP数据库操作类库
2010/05/16 PHP
php中通过curl检测页面是否被百度收录
2013/09/27 PHP
php采集神器cURL使用方法详解
2016/02/19 PHP
基于php判断客户端类型
2016/10/14 PHP
PHP实现普通hash分布式算法简单示例
2018/08/06 PHP
ThinkPHP5框架中使用JWT的方法示例
2020/06/03 PHP
window.event快达到全浏览器支持了,以后使用就方便了
2011/11/30 Javascript
javascript中的toFixed固定小数位数 简单实例分享
2013/07/12 Javascript
javascript中比较字符串是否相等的方法
2013/07/23 Javascript
jquery如何实现锚点链接之间的平滑滚动
2013/12/02 Javascript
javascript实现网页端解压并查看zip文件
2015/12/15 Javascript
javascript实现标签切换代码示例
2016/05/22 Javascript
jquery分隔Url的param方法(推荐)
2016/05/25 Javascript
js控件Kindeditor实现图片自动上传功能
2020/07/20 Javascript
javascript之IE版本检测超简单方法
2016/08/20 Javascript
Angular.js实现动态加载组件详解
2017/05/28 Javascript
JS实现对json对象排序并删除id相同项功能示例
2018/04/18 Javascript
vue form check 表单验证的实现代码
2018/12/09 Javascript
微信小程序实现列表的横向滑动方式
2020/07/15 Javascript
python进阶教程之循环对象
2014/08/30 Python
Python实现判断一个字符串是否包含子串的方法总结
2017/11/21 Python
Flask实现跨域请求的处理方法
2018/09/27 Python
2019 Python最新面试题及答案16道题
2019/04/11 Python
python使用yield压平嵌套字典的超简单方法
2019/11/02 Python
Python利用for循环打印星号三角形的案例
2020/04/12 Python
使用Tensorflow-GPU禁用GPU设置(CPU与GPU速度对比)
2020/06/30 Python
HTML5制作表格样式
2016/11/15 HTML / CSS
个人近期表现材料
2014/02/11 职场文书
运动会演讲稿200字
2014/08/25 职场文书
警察群众路线对照检查材料思想汇报
2014/10/01 职场文书
办公室班子四风问题对照检查材料
2014/10/04 职场文书
公司财务经理岗位职责
2015/04/08 职场文书
元宵节晚会主持词
2015/07/01 职场文书
JS新手入门数组处理的实用方法汇总
2021/04/07 Javascript
Go缓冲channel和非缓冲channel的区别说明
2021/04/25 Golang
Shell脚本一键安装Nginx服务自定义Nginx版本
2022/03/20 Servers