在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实现的解析crontab配置文件代码
Jun 30 Python
python自动化测试实例解析
Sep 28 Python
Python 读写文件和file对象的方法(推荐)
Sep 12 Python
Python3 操作符重载方法示例
Nov 23 Python
详解python中的装饰器
Jul 10 Python
django DRF图片路径问题的解决方法
Sep 10 Python
Python3实现爬虫爬取赶集网列表功能【基于request和BeautifulSoup模块】
Dec 05 Python
python实现定时压缩指定文件夹发送邮件
Dec 22 Python
python实现微信自动回复机器人功能
Jul 11 Python
python自定义时钟类、定时任务类
Feb 22 Python
使用Pyinstaller转换.py文件为.exe可执行程序过程详解
Aug 06 Python
Python3 合并二叉树的实现
Sep 30 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
解析PHP 使用curl提交json格式数据
2013/06/29 PHP
php去除头尾空格的2种方法
2015/03/16 PHP
PHP上传图片类显示缩略图功能
2016/06/30 PHP
jQuery Ajax之$.get()方法和$.post()方法
2009/10/12 Javascript
模仿JQuery sortable效果 代码有错但值得看看
2009/11/05 Javascript
JavaScript Distilled 基础知识与函数
2010/04/07 Javascript
基于jquery的blockui插件显示弹出层
2011/04/14 Javascript
jQuery 获取URL的GET参数值的小例子
2013/04/18 Javascript
多个jquery.datatable共存,checkbox全选异常的快速解决方法
2013/12/10 Javascript
理解和运用JavaScript的闭包机制
2015/08/13 Javascript
使用jQuery中的wrap()函数操作HTML元素的教程
2016/05/24 Javascript
JavaScript生成带有缩进的表格代码
2016/06/15 Javascript
AngularJS入门教程之过滤器详解
2016/08/19 Javascript
webpack配置文件和常用配置项介绍
2017/04/28 Javascript
vue-router路由参数刷新消失的问题解决方法
2017/06/17 Javascript
angularjs 页面自适应高度的方法
2018/01/17 Javascript
使用Vue写一个datepicker的示例
2018/01/27 Javascript
详解如何使用webpack打包JS
2018/06/21 Javascript
VUE+elementui组件在table-cell单元格中绘制微型echarts图
2020/04/20 Javascript
Ubuntu16.04/树莓派Python3+opencv配置教程(分享)
2018/04/02 Python
python使用xlsxwriter实现有向无环图到Excel的转换
2018/12/12 Python
python+opencv实现阈值分割
2018/12/26 Python
set在python里的含义和用法
2019/06/24 Python
Python提取转移文件夹内所有.jpg文件并查看每一帧的方法
2019/06/27 Python
pyecharts绘制中国2020肺炎疫情地图的实例代码
2020/02/12 Python
什么是python的id函数
2020/06/11 Python
css3 media 响应式布局的简单实例
2016/08/03 HTML / CSS
美国网上购买眼镜:Eyeconic
2017/07/29 全球购物
Groupon比利时官方网站:特卖和网上购物高达-70%
2019/08/09 全球购物
GUESS Factory加拿大:牛仔裤、服装及配饰
2019/09/20 全球购物
波兰运动鞋网上商店:Distance.pl
2020/07/30 全球购物
提高EJB性能都有哪些技巧
2012/03/25 面试题
求职信需要的五点内容
2014/02/01 职场文书
婚礼男方父母答谢词
2015/09/29 职场文书
2016年全国助残日活动总结
2016/04/01 职场文书
字节飞书面试promise.all实现示例
2022/06/16 Javascript