变量可以指向函数:
>>> abs(-8) 8
>>> abs <built-in function abs>
可以看出abs(-8)是函数调用,而abs是函数本身
如果我们要获得函数调用结果,我们可以把结果赋值给变量:
>>> x = abs(-8) >>> x 8
如果把函数本身赋值给变量:
>>> f = abs >>> f <built-in function abs>
结论:函数本身也可以赋值给变量。
如果一个变量指向了一个函数,那么能通过该变量来调用这个函数。
>>> f = abs >>> f(-8) 8
函数名也是变量
函数名其实就是指向函数的变量!对于abs()
这个函数,完全可以把函数名abs
看成变量,它指向一个可以计算绝对值的函数!
如果把abs
指向其他对象,会发生什么呢?
>>> abs = 8 >>> abs(-8) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: ‘int‘ object is not callable
把abs
指向8后,就无法通过abs(-8)
调用该函数了,因为abs
这个变量已经不指向求绝对值函数了。
ps:由于abs
函数实际上是定义在__builtin__
模块中的,所以要让修改abs
变量的指向在其它模块也生效,要用__builtin__.abs = 8
。
传入函数
既然变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。
例如:
def add(x, y, f): return f(x) + f(y)
>>> add(3, -5, abs) 8
推导计算过程为:
x ==> 3 y ==> -5 f ==> abs f(x) + f(y) ==> abs(3) + abs(-5) ==> 8
结论:
把函数作为参数传入,这样的函数称为高阶函数。
时间: 2024-10-14 00:52:38