在Python中将函数作为另一个函数的参数传入并调用的方法
作者:BlackMatrix 发布时间:2023-04-10 07:32:26
标签:Python,函数,参数,传入
在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)
来源:https://www.cnblogs.com/blackmatrix/p/5603556.html
0
投稿
猜你喜欢
- Q1:PEP8是什么?Python之禅(import this)是什么?这题是考察你对编码规范的认识,无论是自己写代码还是在团队中写代码,了
- 在上一篇文章中,简单介绍了下闭包(closure)和原型链,现在继续来研究闭包的内部机制。对了,所有的东西都参考自这篇文章:Javascri
- Oracle不像SQLServer那样在存储过程中用Select就可以返回结果集,而是通过Out型的参数进行结果集返回的。实际上是利用REF
- 使用 str.join() 方法打印不带括号的元组,例如 result = ','.join(my_tuple)。 str.
- 数据可视化是以图形格式呈现数据。它通过以简单易懂的格式汇总和呈现大量数据,帮助人们理解数据的重要性,并有助于清晰有效地传达信息。考虑这个给定
- 列表的逆序遍历a = [1,3,6,8,9]print("通过下标逆序遍历1:")for i in a[::-1]: &
- redux-saga 是一个管理 Redux 应用异步操作的中间件,功能类似redux-thunk + async/await, 它通过创建
- 月份转换到中文Function MonthToCH(TheMonth) Dim mm mm=split("一,
- Microsoft SQL Server 2000 能提供超大型系统所需的数据库服务。大型服务器可能有成千上万的用户同时连接到 SQL Se
- 在PyCharm 里,显示行号有两种办法:1,临时设置。右键单击行号处,选择 Show Line Numbers。但是这种方法,只对一个文件
- 前言上篇说到命令行执行测试用例的部分参数如何使用?今天将继续更新其他一些命令选项的使用,和pytest收集测试用例的规则!pytest执行用
- 一、实验目标1、使用 K-means 模型进行聚类,尝试使用不同的类别个数 K,并分析聚类结果。2、按照 8:2 的比例随机将数据划分为训练
- Array.prototype中定义了很多操作数组的方法,下面介绍ECMAScript3中的一些方法1.Array.join()方法该方法将
- 在学习接口测试的时候往往会因为没有实际操作的接口进行测试而烦恼,这里教大家自己编写两个接口用于学习接口测试1、编写一个登录的接口2、在pyc
- TF(Term Frequency)词频,在文章中出现次数最多的词,然而文章中出现次数较多的词并不一定就是关键词,比如常见的对文章本身并没有
- yagmail 实现发邮件yagmail 可以更简单的来实现自动发邮件功能。1、安装pip install yagmail2、简单举例imp
- 前言在实际诊断测试开发中,我们写测试脚本会用到CDD文件中的诊断,常规做法可能是用到哪个就定义哪个,这样做的弊端是有可能造成重复定义,或者整
- 1.静态方法(staticmethod)静态方法:@staticmethod也是一个类方法,是可以直接类调用的。个人认为的使用场景是:只要要
- 情况1: father.php如下定义: <?php $jack = 1000; ?> children.php 如下定义: &
- 在Python中,json指的是符合json语法格式的字符串,可以单行或者多行。它可以方便的在使用在多种语言中,这里介绍的是在python中