在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 18 Python
Python中 传递值 和 传递引用 的区别解析
Feb 22 Python
python3.6.3+opencv3.3.0实现动态人脸捕获
May 25 Python
pyhanlp安装介绍和简单应用
Feb 22 Python
Pycharm新手教程(只需要看这篇就够了)
Jun 18 Python
python 使用pygame工具包实现贪吃蛇游戏(多彩版)
Oct 30 Python
python获取依赖包和安装依赖包教程
Feb 13 Python
python实现图像拼接
Mar 05 Python
python爬虫可以爬什么
Jun 16 Python
python Paramiko使用示例
Sep 21 Python
python 爬虫如何实现百度翻译
Nov 16 Python
利用For循环遍历Python字典的三种方法实例
Mar 25 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
搭建Vim为自定义的PHP开发工具的一些技巧
2015/12/11 PHP
PHP封装的多文件上传类实例与用法详解
2017/02/07 PHP
laravel框架中控制器的创建和使用方法分析
2019/11/23 PHP
jQuery使用ajaxSubmit()提交表单示例
2014/04/04 Javascript
《JavaScript DOM 编程艺术》读书笔记之JavaScript 语法
2015/01/09 Javascript
chrome不支持form.submit的解决方案
2015/04/28 Javascript
手机端转盘抽奖代码分享
2015/09/10 Javascript
jQuery中deferred对象使用方法详解
2016/07/14 Javascript
Jquery Easyui进度条组件Progress使用详解(8)
2020/03/26 Javascript
在iFrame子页面里实现模态框的方法
2018/08/17 Javascript
vue实现微信获取用户信息的方法
2019/03/21 Javascript
js实现固定区域内的不重叠随机圆
2019/10/24 Javascript
使用Python编写爬虫的基本模块及框架使用指南
2016/01/20 Python
Python脚本处理空格的方法
2016/08/08 Python
Python cookbook(数据结构与算法)让字典保持有序的方法
2018/02/18 Python
pygame实现俄罗斯方块游戏
2018/06/26 Python
Python爬虫框架Scrapy基本用法入门教程
2018/07/26 Python
将pandas.dataframe的数据写入到文件中的方法
2018/12/07 Python
python3使用pandas获取股票数据的方法
2018/12/22 Python
Python进阶之@property动态属性的实现
2019/04/01 Python
numpy中的ndarray方法和属性详解
2019/05/27 Python
python实现桌面托盘气泡提示
2019/07/29 Python
python用requests实现http请求代码实例
2019/10/31 Python
Python3之外部文件调用Django程序操作model等文件实现方式
2020/04/07 Python
解决python 执行shell命令无法获取返回值的问题
2020/12/05 Python
利用纯css3实现的文字亮光特效的代码演示
2014/11/27 HTML / CSS
初中班主任评语大全
2014/04/24 职场文书
2014年大学生党员自我评议
2014/09/22 职场文书
个人委托书范本汇总
2014/10/01 职场文书
群众路线自我剖析范文
2014/11/04 职场文书
2015年初三班主任工作总结
2015/05/21 职场文书
公司周年庆典致辞
2015/07/30 职场文书
企业内部管理控制:银行存款控制制度范本
2020/01/10 职场文书
Ajax请求超时与网络异常处理图文详解
2021/05/23 Javascript
浅谈 JavaScript 沙箱Sandbox
2021/11/02 Javascript
Golang实现可重入锁的示例代码
2022/05/25 Golang