函数作为函数的参数

2024-06-02 06:00:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我在一本Python书中看到了这个例子,它展示了如何将一个函数用作另一个函数的参数:

def diff2(f, x, h=1E-6):
    r = (f(x-h) - 2*f(x) + f(x+h))/float(h*h)
    return r

def g(t):
    return t**(-6)

t = 1.2
d2g = diff2(g, t)
print d2g

我的问题是,这个脚本在没有为函数g提供参数的情况下是如何工作的?问题是:

d2g = diff2(g,t)

是不是应该这样做:

d2g = diff2(g(t), t)

Tags: 函数脚本参数returndef情况float例子
2条回答

所讨论的函数是相当随机的,也许很难理解。让我们考虑一个简单的例子,一个函数sum,它接受两个数ab,并返回它们的和。实际上,我们可以很容易地定义另一个函数prod,它也返回它们的乘积。你知道吗

def sum(a,b):
    return a + b

def prod(a,b):
    return a * b

假设我们有另一个函数compute,它以操作(一个函数)和两个操作数(调用函数的两个数字)作为参数。在compute中,我们对参数调用给定的操作。你知道吗

def compute(fn, a, b):
    return fn(a, b)

我们可以做不同的事情。我们可以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

g作为参数传递给diff2。在diff2中,该参数称为f,因此在diff2中,名称f表示函数g。当diff2调用f(x-h)(以及其他调用)时,它正在调用g,并提供参数。你知道吗

换句话说,当您执行diff2(g, t)时,您告诉diff2要调用的函数是gg的参数在diff2中提供:

f(x-h) # calls g with x-h as the argument
f(x)   # calls g with x as the argument
f(x+h) # calls g with x+h as the argument

如果调用diff2(g(t), t),则传递g(1.2)结果,作为参数。g将在调用diff2之前被调用,而diff2将在尝试调用f时失败,因为f将是一个数字(值g(1.2))而不是一个函数。你知道吗

相关问题 更多 >