在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实现partial改变方法默认参数
Aug 18 Python
python统计中文字符数量的两种方法
Jan 31 Python
python实现两张图片的像素融合
Feb 23 Python
python实现AES加密解密
Mar 28 Python
解决Pyinstaller 打包exe文件 取消dos窗口(黑框框)的问题
Jun 21 Python
python3 线性回归验证方法
Jul 09 Python
python基于pdfminer库提取pdf文字代码实例
Aug 15 Python
python实现猜拳小游戏
Apr 05 Python
解决在pycharm运行代码,调用CMD窗口的命令运行显示乱码问题
Aug 23 Python
Python 实现加密过的PDF文件转WORD格式
Feb 04 Python
Python多个装饰器的调用顺序实例解析
May 22 Python
python在一个范围内取随机数的简单实例
Aug 16 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取进制余数函数代码
2012/01/19 PHP
CI框架中libraries,helpers,hooks文件夹详细说明
2014/06/10 PHP
php查看网页源代码的方法
2015/03/13 PHP
浅谈php中include文件变量作用域
2015/06/18 PHP
thinkPHP中验证码的简单使用方法
2015/12/26 PHP
php 根据自增id创建唯一编号类
2017/04/06 PHP
PHP实现redis限制单ip、单用户的访问次数功能示例
2018/06/16 PHP
jQuery技巧总结
2011/01/01 Javascript
JQuery实现倒计时按钮的实现代码
2012/03/23 Javascript
jQuery-onload让第一次页面加载时图片是淡入方式显示
2012/05/23 Javascript
javascript小数四舍五入多种方法实现
2012/12/23 Javascript
js循环改变div颜色具体方法
2013/06/25 Javascript
Jquery给基本控件的取值、赋值示例
2014/05/23 Javascript
js数组中如何随机取出一个值
2014/06/13 Javascript
如何正确使用javascript 来进行我们的程序开发
2014/06/23 Javascript
jQuery实现平滑滚动页面到指定锚点链接的方法
2015/07/15 Javascript
jquery 遍历数组 each 方法详解
2016/05/25 Javascript
js实现3D图片环展示效果
2017/03/09 Javascript
javascript原生封装一个淡入淡出效果的函数测试实例代码
2018/03/19 Javascript
基于JS开发微信网页录音功能的实例代码
2019/04/30 Javascript
Layui数据表格跳转到指定页的实现方法
2019/09/05 Javascript
Vue组件通信入门之Provide和Inject机制
2019/12/29 Javascript
微信小程序 bindtap 传参的实例代码
2020/02/21 Javascript
OpenLayers3实现对地图的基本操作
2020/09/28 Javascript
python实现单向链表详解
2018/02/08 Python
实例讲解Python中浮点型的基本内容
2019/02/11 Python
简述 Python 的类和对象
2020/08/21 Python
HTML5 Canvas实现玫瑰曲线和心形图案的代码实例
2014/04/10 HTML / CSS
卡西欧G-SHOCK英国官网: 防水防震手表
2018/01/08 全球购物
医学院毕业生自荐信范文
2014/03/06 职场文书
运动会演讲稿50字
2014/08/25 职场文书
说好普通话圆梦你我他演讲稿
2014/09/21 职场文书
2014年关工委工作总结
2014/11/17 职场文书
创业计划之特色精品店
2019/08/12 职场文书
Python趣味挑战之教你用pygame画进度条
2021/05/31 Python