所讨论的功能相当随机,可能难以理解。让我们考虑一个简单的例子,一个函数sum
,它接受两个数字a
和b
,并返回它们的和。实际上,我们可以很容易地定义另一个函数prod
,它也返回他们的产品。
def sum(a,b):
return a + b
def prod(a,b):
return a * b
假设我们有另一个 function compute
,它将操作(一个函数)和两个操作数(调用函数的两个数字)作为其参数。在compute
中,我们在参数上调用给定的操作。
def compute(fn, a, b):
return fn(a, b)
我们可以compute
做不同的事情。我们可以compute
对sum
两个数:
compute(sum, 1, 3)
我们可以compute
将两个数相乘:
compute(prod, 1, 3)
基本上,函数名后面没有括号,我们实际上并没有调用函数,它只是命名空间中的另一个对象(恰好是我们可以调用的函数)。我们不会在 内部调用该函数compute
,当我们这样做时fn(a,b)
。
让我们看看控制台输出的样子:
>>> compute(sum,1,3)
4
>>> compute(prod,1,3)
3
>>> sum
<function sum at mem-address>
>>> prod
<function prod at mem-address>
>>> sum(1,2)
3