在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内存管理分析
Apr 08 Python
python列表的常用操作方法小结
May 21 Python
Python 转义字符详细介绍
Mar 21 Python
在Python的一段程序中如何使用多次事件循环详解
Sep 07 Python
Python使用Dijkstra算法实现求解图中最短路径距离问题详解
May 16 Python
深入了解和应用Python 装饰器 @decorator
Apr 02 Python
Python实现计算文件MD5和SHA1的方法示例
Jun 11 Python
springboot配置文件抽离 git管理统 配置中心详解
Sep 02 Python
python实现高斯(Gauss)迭代法的例子
Nov 20 Python
tornado+celery的简单使用详解
Dec 21 Python
Python 实现OpenCV格式和PIL.Image格式互转
Jan 09 Python
Python无损压缩图片的示例代码
Aug 06 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
mysql 搜索之简单应用
2007/04/27 PHP
一个简单的PHP验证码实现代码
2014/05/10 PHP
ThinkPHP中使用Ueditor富文本编辑器
2015/09/02 PHP
IE autocomplete internet explorer's autocomplete
2007/06/30 Javascript
JQuery中的$.getJSON 使用说明
2011/03/10 Javascript
学习从实践开始之jQuery插件开发 菜单插件开发
2012/05/03 Javascript
jquery操作复选框(checkbox)的12个小技巧总结
2014/02/04 Javascript
js与运算符和或运算符的妙用
2014/02/14 Javascript
JavaScript中的pow()方法使用详解
2015/06/15 Javascript
JS+Canvas 实现下雨下雪效果
2016/05/18 Javascript
angular route中使用resolve在uglify压缩后问题解决
2016/09/21 Javascript
对存在JavaScript隐式类型转换的四种情况的总结(必看篇)
2017/08/31 Javascript
纯js代码生成可搜索选择下拉列表的实例
2018/01/11 Javascript
jquery应用实例分享_实现手风琴特效
2018/02/01 jQuery
vue 使用ref 让父组件调用子组件的方法
2018/02/08 Javascript
vue elementui form表单验证的实现
2018/11/11 Javascript
Python类定义和类继承详解
2015/05/08 Python
python实现简单多人聊天室
2018/12/11 Python
python同步windows和linux文件
2019/08/29 Python
Python数据库小程序源代码
2019/09/15 Python
Python开发之身份证验证库id_validator验证身份证号合法性及根据身份证号返回住址年龄等信息
2020/03/20 Python
Python绘图之二维图与三维图详解
2020/08/04 Python
美国领先的户外服装与装备用品店:Moosejaw
2016/08/25 全球购物
中国高端鲜花第一品牌:roseonly(一生只送一人)
2017/02/12 全球购物
西班牙在线药店:DosFarma
2020/03/28 全球购物
C/C++ 笔试、面试题目大汇总
2015/11/21 面试题
医院学雷锋活动策划方案
2014/02/15 职场文书
年度考核自我鉴定
2014/03/19 职场文书
担保书格式及范文
2014/04/01 职场文书
保护环境建议书300字
2014/05/13 职场文书
2014乡镇干部纪律作风整顿思想汇报
2014/09/13 职场文书
学术会议通知
2015/04/15 职场文书
入党群众意见范文
2015/06/02 职场文书
六年级作文之自救
2019/12/19 职场文书
简单总结SpringMVC拦截器的使用方法
2021/06/28 Java/Android
Python音乐爬虫完美绕过反爬
2021/08/30 Python