在Python中将函数作为另一个函数的参数传入并调用的方法


Posted in Python onJanuary 22, 2019

在Python中,函数本身也是对象,所以可以将函数作为参数传入另一函数并进行调用

在旧版本中,可以使用apply(function, *args, **kwargs)进行调用,但是在新版本中已经移除,以function(*args, **kwargs)进行替代,所以也不应该再使用apply方法

示例代码:

def func_a(func, *args, **kwargs):
  print(func(*args, **kwargs))

def func_b(*args):
  return args

if __name__ == '__main__':
  func_a(func_b, 1, 2, 3)

在代码中,将函数func_b作为函数func_a的参数传入,将函数func_b的参数以元组args传入,并在调用func_b时,作为func_b的参数。

运行结果:

(1, 2, 3)

但是这里存在一个问题,但func_a和func_b需要同名的参数时,就会出现异常,如:

def func_a(arg_a, func, **kwargs):
  print(arg_a)
  print(func(**kwargs))

def func_b(arg_a):
  print(arg_a)

if __name__ == '__main__':
  func_a(arg_a='Hello Python', func=func_b)

异常信息:

TypeError: func_b() missing 1 required positional argument: 'arg_a'

虽然通过修改,手动将arg_a作为参数传入func中进行调用,可以正常运行,但这明显不符合设计初衷:在func_a中执行func(**kwargs)时,很可能并不知道func到底需要什么参数。换句话说,如果已经提前知道需要调用什么函数,那完全不必要把函数作为参数传入另一个函数并调用,直接调用函数即可。

def func_a(arg_a, func, **kwargs):
  print(arg_a)
  func(arg_a=arg_a, **kwargs)

def func_b(arg_a):
  print(arg_a)

if __name__ == '__main__':
  func_a(arg_a='Hello Python', func=func_b)

当加入第三个函数,func_c,它不需要arg_a这个参数时,就会出现问题。

def func_a(arg_a, func, **kwargs):
  print(arg_a)
  func(arg_a=arg_a, **kwargs)

def func_b(arg_a):
  print(arg_a)

def func_c():
  print('Hello World')

if __name__ == '__main__':
  func_a(arg_a='Hello Python', func=func_b)
  func_a(arg_a='Hello Python', func=func_c)

以上这篇在Python中将函数作为另一个函数的参数传入并调用的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python对象体系深入分析
Oct 28 Python
Python实现网络端口转发和重定向的方法
Sep 19 Python
Django视图和URL配置详解
Jan 31 Python
Python开发的十个小贴士和技巧及长常犯错误
Sep 27 Python
Python实现12306火车票抢票系统
Jul 04 Python
通过PHP与Python代码对比的语法差异详解
Jul 10 Python
Python 实现训练集、测试集随机划分
Jan 08 Python
Python改变对象的字符串显示的方法
Aug 01 Python
python try...finally...的实现方法
Nov 25 Python
Python机器学习之底层实现KNN
Jun 20 Python
PYTHON基于Pyecharts绘制常见的直角坐标系图表
Apr 28 Python
Python实现将多张图片合成MP4视频并加入背景音乐
Apr 28 Python
python3.4爬虫demo
Jan 22 #Python
使用Template格式化Python字符串的方法
Jan 22 #Python
python实现公司年会抽奖程序
Jan 22 #Python
对python函数签名的方法详解
Jan 22 #Python
python实现大转盘抽奖效果
Jan 22 #Python
Python函数返回不定数量的值方法
Jan 22 #Python
python实现转盘效果 python实现轮盘抽奖游戏
Jan 22 #Python
You might like
全文搜索和替换
2006/10/09 PHP
php date与gmdate的获取日期的区别
2010/02/08 PHP
DedeCMS 核心类TypeLink.class.php摘要笔记
2010/04/07 PHP
Php Ctemplate引擎开发相关内容
2012/03/03 PHP
页面乱码问题的根源及其分析
2013/08/09 PHP
PHP SOCKET编程详解
2015/05/22 PHP
PHP获取当前文件的父目录方法汇总
2016/07/21 PHP
PhotoShop给图片自动添加边框及EXIF信息的JS脚本
2015/02/15 Javascript
JavaScript实现简单Tip提示框效果
2016/04/20 Javascript
基于jquery实现表格内容筛选功能实例解析
2016/05/09 Javascript
JS根据生日月份和日期计算星座的简单实现方法
2016/11/24 Javascript
探讨跨域请求资源的几种方式(总结)
2016/12/02 Javascript
xmlplus组件设计系列之按钮(2)
2017/04/26 Javascript
js截取字符串功能的实现方法
2017/09/27 Javascript
JS动态添加元素及绑定事件造成程序重复执行解决
2017/12/07 Javascript
javascript回调函数详解
2018/02/06 Javascript
vue实现移动端悬浮窗效果
2018/12/01 Javascript
jQuery访问json文件中数据的方法示例
2019/01/28 jQuery
小试小程序云开发(小结)
2019/06/06 Javascript
[51:39]DOTA2-DPC中国联赛 正赛 Magma vs LBZS BO3 第二场 2月7日
2021/03/11 DOTA
Python中使用PDB库调试程序
2015/04/05 Python
用Python实现KNN分类算法
2017/12/22 Python
pyqt5实现俄罗斯方块游戏
2019/01/11 Python
Python使用for生成列表实现过程解析
2020/09/22 Python
OpenCV实现机器人对物体进行移动跟随的方法实例
2020/11/09 Python
英国时尚运动品牌的合集:The Sports Edit
2017/12/20 全球购物
美国首屈一指的高品质珠宝设计师和零售商:Allurez
2018/01/23 全球购物
Booking.com西班牙:全球酒店预订
2018/03/30 全球购物
为奢侈时尚带来了慈善元素:Olivela
2018/09/29 全球购物
大专学生推荐信范文
2013/11/19 职场文书
文明之星事迹材料
2014/05/09 职场文书
图书馆志愿者活动总结
2014/06/27 职场文书
新郎结婚保证书
2015/02/26 职场文书
自主招生学校推荐信范文
2015/03/26 职场文书
爸爸的三轮车观后感
2015/06/16 职场文书
MySql中的json_extract函数处理json字段详情
2022/06/05 MySQL