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

Aut*_*Sha -1 python python-2.7 python-3.x

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

def add_five(x):
   return x+5

print (apply_twice(add_five,10))
Run Code Online (Sandbox Code Playgroud)

我得到的输出是20.

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

Jim*_*ard 7

该函数apply_twice(func,arg)接受两个参数,一个函数对象func和一个传递给被func调用函数的参数arg.

在Python中,函数可以很容易地作为参数传递给其他函数,它们的处理方式不同于任何其他参数类型(即一等公民).

在里面apply_twice,func在行中调用两次:

func(func(arg))
Run Code Online (Sandbox Code Playgroud)

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

res = func(arg)  
func(res)  
Run Code Online (Sandbox Code Playgroud)

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

res = add_five(arg)  # equals: 15
add_five(res)        # result: 20
Run Code Online (Sandbox Code Playgroud)

当然,这会返回您的预期结果.

要记住的关键点是你不应该把函数Python看作某些特殊的构造,函数就像ints,listss和其他所有东西一样.