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的Django框架中inclusion_tag的使用
Jul 21 Python
浅谈python新手中常见的疑惑及解答
Jun 14 Python
Python+Pika+RabbitMQ环境部署及实现工作队列的实例教程
Jun 29 Python
Python爬虫实战:分析《战狼2》豆瓣影评
Mar 26 Python
python实现Zabbix-API监控
Sep 17 Python
Python中Proxypool库的安装与配置
Oct 19 Python
Django框架文件上传与自定义图片上传路径、上传文件名操作分析
May 10 Python
python basemap 画出经纬度并标定的实例
Jul 09 Python
使用python实现对元素的长截图功能
Nov 14 Python
python如何基于redis实现ip代理池
Jan 17 Python
python实现银行实战系统
Feb 26 Python
使用Jupyter notebooks上传文件夹或大量数据到服务器
Apr 14 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
Function eregi is deprecated (解决方法)
2013/06/21 PHP
PHP生成短网址的3种方法代码实例
2014/07/08 PHP
从刷票了解获得客户端IP的方法
2015/09/21 PHP
PHP常用技巧汇总
2016/03/04 PHP
php实时倒计时功能实现方法详解
2017/02/27 PHP
模拟select的代码
2011/10/19 Javascript
基于jquery & json的省市区联动代码
2012/06/26 Javascript
js实现可拖动DIV的方法
2013/12/17 Javascript
js正则表达式中test,exec,match方法的区别说明
2014/01/29 Javascript
Node.js 学习笔记之简介、安装及配置
2015/03/03 Javascript
Bootstrap图片轮播组件Carousel使用方法详解
2016/10/20 Javascript
js仿淘宝评价评分功能
2017/02/28 Javascript
javascript html5轻松实现拖动功能
2017/03/01 Javascript
JS+canvas动态绘制饼图的方法示例
2017/09/12 Javascript
20道JS原理题助你面试一臂之力(必看)
2019/07/22 Javascript
原生js实现照片墙效果
2020/10/13 Javascript
在Django框架中伪造捕捉到的URLconf值的方法
2015/07/18 Python
Python 从一个文件中调用另一个文件的类方法
2019/01/10 Python
详解Python的数据库操作(pymysql)
2019/04/04 Python
详解python websocket获取实时数据的几种常见链接方式
2019/07/01 Python
Atom Python 配置Python3 解释器的方法
2019/08/28 Python
Django实现网页分页功能
2019/10/31 Python
python实现贪吃蛇游戏源码
2020/03/21 Python
python RSA加密的示例
2020/12/09 Python
美国新兴城市生活方式零售商:VILLA
2017/12/06 全球购物
北京RT科技有限公司.net工程师面试题
2013/02/15 面试题
数控加工专业毕业生自荐信
2013/09/27 职场文书
函授本科自我鉴定
2013/11/03 职场文书
新闻编辑自荐书范文
2014/02/12 职场文书
采购经理岗位职责
2014/02/16 职场文书
财务人员的自我评价范文
2014/03/03 职场文书
2014年五一促销活动方案
2014/03/09 职场文书
舞蹈兴趣小组活动总结
2014/07/07 职场文书
大学军训通讯稿(2016最新版)
2015/12/21 职场文书
亲情作文之母爱
2019/09/25 职场文书
简单总结SpringMVC拦截器的使用方法
2021/06/28 Java/Android