在实际使用中,我们有时希望将函数作为参数传递给另一个方法使用。
比如装饰器实际就是函数调用函数
举个例子,我想传递在调用方法之前打印一下时间:
使用函数当做入参
那就可以把方法名A当做入参传递给方法B,调用的时候直接用【方法名()】来调用方法内容
>>> import time
>>> def run(func):
print (time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
func()
print (time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
>>> def test():
print("我是个测试文件")
>>> run(test)
2019-05-10 11:46:53
我是个测试文件
2019-05-10 11:46:53
使用函数当做入参,函数本身包含参数
如果要调用的方法A有参数怎么办呢?在定义B方法的时候,也将参数传进去,然后调用方法的时候使用【方法名(参数1,参数2)】
#将方法名和参数都传递给调用的方法
>>> def run(func,a,b):
print (time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
func(a,b)
print (time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
>>> def plus(a,b):
print(a+b)
>>> run(plus,3,5)
2019-05-10 11:51:08
8
2019-05-10 11:51:08
使用函数当做入参,函数本身包含不确定个数的入参
如果要调用的方法的入参个数不确定,可以使用args或**args。但是一定要把args放到最后面
#有时候调用的方法的入参个数不确定,可使用*args表示。
#但是注意一定要把*args放到后面,因为run()也有可能入参
>>> def run(func,a,*args):
print (time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
print(a)
print(*args)
print (time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
>>> def plus(*args):
temp=0
for i in args:
temp=temp+i
print(temp)
>>> run(plus,100,1,2,3,4)
2019-05-10 11:55:14
100
1 2 3 4
2019-05-10 11:55:14
>>>
把函数作为参数
在2.1小节中,我们讲了高阶函数的概念,并编写了一个简单的高阶函数:
def add(x, y, f):
return f(x) + f(y)
如果传入abs作为参数f的值:
add(-5, 9, abs)
根据函数的定义,函数执行的代码实际上是:
abs(-5) + abs(9)
由于参数 x, y 和 f 都可以任意传入,如果 f 传入其他函数,就可以得到不同的返回值。
任务
利用add(x,y,f)函数,计算:
import math
def add(x, y, f):
return f(x) + f(y)
print add(25, 9, math.sqrt)
结果为8.0
参考:
https://www.cnblogs.com/meitian/p/6756665.html
https://www.cnblogs.com/superxuezhazha/p/5714949.html