变量可以指向函数
#函数的调用
>>> abs(-5)
5
#直接写abs则返回函数对象
>>> abs
<built-in function abs>
#定义一个变量f,把它指向abs,对f调用相当于对abs调用
#说明变量可以指向函数
>>> f = abs
>>> f(-8)
8
函数名其实就是指向函数的变量
#这里把abs指向另一个函数,则abs不再是求绝对值的函数了
>>> abs = len
>>> abs(-5)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: object of type 'int' has no len()
#可以得到字符串的长度
>>> abs('hehe')
4
#以上说明了函数名和普通的变量没有区别,它指向的只是一个函数对象
高阶函数:能接收函数做参数的函数
- 变量可以指向函数
- 函数的参数可以接收变量
- 一个函数可以接收另一个函数作为参数
- 能接收函数作参数的函数就是高阶函数
来看一个高阶函数的例子
>>> def add(x, y, f): #定义一个add函数
... return f(x) + f(y)
...
>>> add(-7, 9, abs) #对函数进行调用
16
任务利用add(x,y,f)函数,计算:
#答案
import math
def add(x, y, f):
return f(x) + f(y)
print add(25, 9, math.sqrt)
- 像这种内层函数引用了外层函数的变量(参数也算变量),然后返回内层函数的情况,称为闭包(Closure)。
- 闭包的特点是返回的函数还引用了外层函数的局部变量,所以,要正确使用闭包,就要确保引用的局部变量在函数返回后不能变。
- 高阶函数可以接收函数做参数,有些时候,我们不需要显式地定义函数,直接传入匿名函数更方便。
- 匿名函数有个限制,就是只能有一个表达式,不写return,返回值就是该表达式的结果。
- 使用匿名函数,可以不必定义函数名,直接创建一个函数对象,很多时候可以简化代码
网友评论