python 把函数作为参数 ---高阶函数

本文详细介绍了如何在Python中将函数作为参数传递给其他函数,包括无参数、带参数及不定数量参数的情况,展示了装饰器的概念及其应用,同时通过实例解释了高阶函数的使用。
该文章已生成可运行项目,

在实际使用中,我们有时希望将函数作为参数传递给另一个方法使用。
比如装饰器实际就是函数调用函数

举个例子,我想传递在调用方法之前打印一下时间:

使用函数当做入参
那就可以把方法名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

本文章已经生成可运行项目
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值