谁能解释这个功能程序是如何工作的?

时间:2016-07-09 10:40:41

标签: python python-2.7 python-3.x

python3

我得到的输出是20。

这个实际上让我感到困惑,比如它是如何工作的。任何人都可以通过分解来解释我这是如何工作的

3 个答案:

答案 0 :(得分:7)

函数apply_twice(func,arg)接受两个参数,一个函数对象func和一个传递给名为func的函数arg的参数。

在Python中,函数可以很容易地作为参数传递给其他函数, 它们没有被区别对待 比任何其他参数类型(即first class citizens)。

apply_twice内,func在该行中被调用两次:

func(func(arg))

或者,可以以更友好的方式查看:

res = func(arg)  
func(res)  

如果将func替换为add_five中传递的函数名称,则会得到以下内容:

res = add_five(arg)  # equals: 15
add_five(res)        # result: 20

当然会返回您的预期结果。

要记住的关键点是你不应该将Python中的函数视为一些特殊的构造,函数就像int s,lists s和一切一样的对象别的是。

答案 1 :(得分:2)

print调用开始,扩展它执行的代码如下:

apply_twice(add_five,10))

add_five(add_five(10)) # add_five(10) = 15

add_five(15) # add_five(15) = 20

给你结果:20。

调用apply_twice时,传入的是函数对象和值。正如您在apply_twice定义中所看到的,您可以看到func被传递给它的函数对象替换(在本例中为add_five)。然后,从内部func(arg)调用开始,评估结果,然后在外部add_five调用中再次传递给return func( ... )

答案 2 :(得分:0)

您在这里需要了解的是

  

apply_twice(func,arg)

是一个接受两个参数的更高函数(另一个名为func的函数和一个参数arg)。它的工作方式是先评估另一个函数的值,然后将该值用作更高函数内的参数。

请记住,我们有一个函数add_five(x),该函数将其中的参数提供项加5 ... 然后将此函数add_five(x)作为参数传递给另一个名为 apply_twice_(func,arg)返回func(func(arg))

现在分裂func(func(arg)),我们有  func(arg) #let称之为a 然后func(func(arg))==func(a),因为a = func(agr)

并且(a)是我们的add_five(x)函数,在将其加5后,然后将我们得到的值重新用作另一个新参数来向其添加另外5,这就是为什么我们将20作为我们的结果。

另一个例子是:

def test(func, arg):
  return func(func(arg))

def mult(x):
  return x * x

print(test(mult, 2))

结果为16。