在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之模块的加载
Oct 24 Python
Django中url的反向查询的方法
Mar 14 Python
Python中pandas模块DataFrame创建方法示例
Jun 20 Python
linux安装Python3.4.2的操作方法
Sep 28 Python
在IPython中执行Python程序文件的示例
Nov 01 Python
浅谈Python3中strip()、lstrip()、rstrip()用法详解
Apr 29 Python
python批量识别图片指定区域文字内容
Apr 30 Python
Python脚本去除文件的只读性操作
Mar 05 Python
使用npy转image图像并保存的实例
Jul 01 Python
Python自带的IDE在哪里
Jul 01 Python
Python 高效编程技巧分享
Sep 10 Python
Python趣味爬虫之用Python实现智慧校园一键评教
May 28 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
yii框架配置默认controller和action示例
2014/04/30 PHP
PHP封装分页函数实现文本分页和数字分页
2014/10/23 PHP
php文件上传简单实现方法
2015/01/24 PHP
PHP 自动加载的简单实现(推荐)
2016/08/12 PHP
php 中htmlentities导致中文无法查询问题
2018/09/10 PHP
php+ajax实现商品对比功能示例
2019/04/13 PHP
使用Laravel中的查询构造器实现增删改查功能
2019/09/03 PHP
jquery animate 动画效果使用说明
2009/11/04 Javascript
JavaScript改变HTML元素的样式改变CSS及元素属性
2013/11/12 Javascript
js浏览器本地存储store.js介绍及应用
2014/05/13 Javascript
微信小程序 loading 详解及实例代码
2016/11/09 Javascript
解决Vue 浏览器后退无法触发beforeRouteLeave的问题
2017/12/24 Javascript
JS简单获得节点元素的方法示例
2018/02/10 Javascript
详解Webpack loader 之 file-loader
2018/11/07 Javascript
深入学习js函数的隐式参数 arguments 和 this
2019/06/24 Javascript
如何在JS文件中获取Vue组件
2020/09/16 Javascript
[03:06]2018年度CS GO最具人气解说-完美盛典
2018/12/16 DOTA
python编写暴力破解FTP密码小工具
2014/11/19 Python
Python的迭代器和生成器
2015/07/29 Python
浅谈Python单向链表的实现
2015/12/24 Python
Python中列表list以及list与数组array的相互转换实现方法
2017/09/22 Python
浅谈numpy库的常用基本操作方法
2018/01/09 Python
利用Python如何批量更新服务器文件
2018/07/29 Python
python3 map函数和filter函数详解
2019/08/26 Python
css3图片边框border-image的用法
2017/06/30 HTML / CSS
网页中的电话号码如何实现一键直呼效果_附示例
2016/03/15 HTML / CSS
美国新娘礼品店:The Paisley Box
2020/09/08 全球购物
硕士生工作推荐信
2014/03/07 职场文书
继承权公证书
2014/04/09 职场文书
好习惯伴我成长演讲稿
2014/05/21 职场文书
股东出资证明书(正规版)
2014/09/24 职场文书
2014年妇幼卫生工作总结
2014/12/09 职场文书
2015年党风廉政承诺书
2015/01/22 职场文书
2016年“我们的节日·中秋节”活动总结
2016/04/05 职场文书
2019大学生社会实践报告汇总
2019/08/16 职场文书
ubuntu端向日葵键盘输入卡顿问题及解决
2022/12/24 Servers