在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中使用序列的方法
Aug 03 Python
Python字符串、元组、列表、字典互相转换的方法
Jan 23 Python
Python循环语句中else的用法总结
Sep 11 Python
深入理解Python中变量赋值的问题
Jan 12 Python
django限制匿名用户访问及重定向的方法实例
Feb 07 Python
Python实用技巧之利用元组代替字典并为元组元素命名
Jul 11 Python
Python抽象和自定义类定义与用法示例
Aug 23 Python
Python实现繁?转为简体的方法示例
Dec 18 Python
python3实现弹弹球小游戏
Nov 25 Python
使用Python的Turtle库绘制森林的实例
Dec 18 Python
python爬虫开发之Beautiful Soup模块从安装到详细使用方法与实例
Mar 09 Python
变长双向rnn的正确使用姿势教学
May 31 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
SESSION信息保存在哪个文件目录下以及能够用来保存什么类型的数据
2012/06/17 PHP
PHP Error与Logging函数的深入理解
2013/06/03 PHP
PHP set_error_handler()函数使用详解(示例)
2013/11/12 PHP
PHP实现微信公众平台音乐点播
2014/03/20 PHP
php+ajax无刷新上传图片实例代码
2015/11/17 PHP
PHP文件下载实例代码浅析
2016/08/17 PHP
ThinkPHP实现分页功能
2017/04/28 PHP
LazyForm jQuery plugin 定制您的CheckBox Radio和Select
2009/10/24 Javascript
Javascript实现的鼠标经过时播放声音
2010/05/18 Javascript
js调用activeX获取u盘序列号的代码
2011/11/21 Javascript
一个不错的仿携程自定义数据下拉选择select
2014/09/01 Javascript
js获取checkbox值的方法
2015/01/28 Javascript
jQuery及JS实现循环中暂停的方法
2015/02/02 Javascript
理解Javascript图片预加载
2016/02/23 Javascript
JS判断字符串变量是否含有某个字串的实现方法
2016/06/03 Javascript
angularjs 源码解析之scope
2016/08/22 Javascript
Angular2 环境配置详细介绍
2016/09/21 Javascript
使用smartupload组件实现jsp+jdbc上传下载文件实例解析
2017/01/05 Javascript
详解JavaScript 中getElementsByName在IE中的注意事项
2017/02/21 Javascript
使用Vue.js和Flask来构建一个单页的App的示例
2018/03/21 Javascript
Python中的异常处理相关语句基础学习笔记
2016/07/11 Python
Python使用回溯法子集树模板解决迷宫问题示例
2017/09/01 Python
pygame实现简易飞机大战
2018/09/11 Python
解决Python print输出不换行没空格的问题
2018/11/14 Python
python根据txt文本批量创建文件夹
2020/12/08 Python
pytorch三层全连接层实现手写字母识别方式
2020/01/14 Python
解决pycharm中导入自己写的.py函数出错问题
2020/02/12 Python
Python如何爬取51cto数据并存入MySQL
2020/08/25 Python
html5 canvas的绘制文本自动换行的示例代码
2018/09/17 HTML / CSS
企业治理工作自我评价
2013/09/26 职场文书
医药专业应届毕业生求职信范文
2014/01/01 职场文书
小学红领巾中秋节广播稿
2014/01/13 职场文书
工程采购员岗位职责
2014/03/09 职场文书
校车安全责任书
2014/08/25 职场文书
2014教师党员自我评议(5篇)
2014/09/20 职场文书
python神经网络 使用Keras构建RNN训练
2022/05/04 Python