为什么这个输出在python中是30?

为什么这个输出在python中是30?,python,function,Python,Function,有人能解释一下为什么python的这段代码输出30?好像是add=func?但是python如何在不声明的情况下知道这一点呢。这是sololearn.com python课程中的一个问题,很多人似乎不理解 def add(x, y): return x + y def do_twice(func, x, y): return func(func(x, y), func(x, y)) a = 5 b = 10 print(do_twice(add, a, b)) 使用add

有人能解释一下为什么python的这段代码输出30?好像是add=func?但是python如何在不声明的情况下知道这一点呢。这是sololearn.com python课程中的一个问题,很多人似乎不理解

def add(x, y):
    return x + y

def do_twice(func, x, y):
    return func(func(x, y), func(x, y))

a = 5
b = 10

print(do_twice(add, a, b))
使用
add
调用时,
5
10
将返回

add(add(5, 10), add(5, 10))
i、 e

这确实是
30


add
已作为第一个参数传递,因此称为
func
do\u两次
。同样地,
a
为5,
b
10
a设置为5,b设置为10。这个add函数只返回两个输入的和。 使用add函数5和10作为输入调用dou两次。
首先,do_两次计算func(x,y)的两个内部调用中的5和10之和。这就给我们留下了“returnfunc(15,15)”。这加上15和15,得到30。最后,打印出这个值。这就是为什么它是30。请随时跟进任何澄清

Python不在乎为func传递什么,因为函数要执行两次。
但在函数体中,两次调用传入的func,即使用func,就好像它应该是可调用的一样(可以调用的东西。函数就是这样一种东西)。您可以通过两次传递字符串to do_来验证它,您应该会看到一个错误,说明字符串不可调用或其他什么。

您将函数
add
作为参数传递给
do_两次
,所以是的,
func
作为参数传递时是add,正如
x
5
一样,因为当您将它作为
x
的参数传递时,
a
等于这个值……它不仅仅看起来像那样<当你两次调用
do_
时,code>func被显式设置为
add
。请参阅或5+10+5+10=30简单数学如果这不是你想要的,你想要什么,为什么?非常清楚,谢谢你,下次我可能应该自己一行一行地写出来
add(add(5, 10), add(5, 10))
add(15, 15)