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

  • 7
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python函数是指可以接受其他函数作为参数,并且/或者返回一个函数作为结果的函数。在Python中,map()和reduce()是两个常见的高阶函数。 map()函数可以将一个函数应用于一个可迭代对象的每个元素,并将结果返回为一个迭代器。它的格式是map(function, Iterable),其中function是要应用的函数,Iterable是要操作的可迭代对象。map()函数将可迭代对象的每个元素作为参数传入指定的函数,并对元素进行操作,最终返回一个迭代器。 reduce()函数可以对可迭代对象的元素进行累积操作。它的格式是reduce(function, Iterable),其中function是一个函数,有两个参数,Iterable是要进行操作的可迭代对象。reduce()函数会将列表的前两个元素作为参数传入function函数中,然后将运行结果作为第一个参数,再将列表的下一个元素作为第二个参数传入,如此类推,直至元素全部调用。 例如,如果我们有一个列表lst = [1, 2, 3, 4,我们可以使用reduce()函数将列表中的元素相乘,得到结果24。代码如下所示: ```python from functools import reduce lst = [1, 2, 3, 4] def multiply(a, b): return a * b result = reduce(multiply, lst) print(result) # 输出结果为24 ``` 这段代码中,我们首先导入了reduce()函数,然后定义了一个multiply函数,这个函数接受两个参数,将它们相乘并返回结果。接下来,我们使用reduce()函数将multiply函数应用于lst列表中的元素,最终得到结果24。 综上所述,Python高阶函数可以帮助我们更方便地对可迭代对象进行操作,提高代码的复用性和简洁性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [python 函数的使用-python基础,python函数的使用说明,有python2的参考代码](https://download.csdn.net/download/li171049/88221777)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Python的四大高阶函数](https://blog.csdn.net/weixin_51445771/article/details/120015684)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值