我在一本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:
所讨论的函数是相当随机的,也许很难理解。让我们考虑一个简单的例子,一个函数
sum
,它接受两个数a
和b
,并返回它们的和。实际上,我们可以很容易地定义另一个函数prod
,它也返回它们的乘积。你知道吗假设我们有另一个函数
compute
,它以操作(一个函数)和两个操作数(调用函数的两个数字)作为参数。在compute
中,我们对参数调用给定的操作。你知道吗我们可以做不同的事情。我们可以
compute
两个数字的sum
:我们可以
compute
两个数的乘积:基本上,如果函数名后面没有括号,我们实际上并没有调用函数,它只是名称空间中的另一个对象(正好是我们可以调用的函数)。只有在
compute
内部调用函数时,才会调用fn(a,b)
。你知道吗让我们看看控制台输出是什么样子的:
g
作为参数传递给diff2
。在diff2
中,该参数称为f
,因此在diff2
中,名称f
表示函数g
。当diff2
调用f(x-h)
(以及其他调用)时,它正在调用g
,并提供参数。你知道吗换句话说,当您执行
diff2(g, t)
时,您告诉diff2
要调用的函数是g
。g
的参数在diff2
中提供:如果调用
diff2(g(t), t)
,则传递g(1.2)
的结果,作为参数。g
将在调用diff2
之前被调用,而diff2
将在尝试调用f
时失败,因为f
将是一个数字(值g(1.2)
)而不是一个函数。你知道吗相关问题 更多 >
编程相关推荐