其实很简单的,你看左边的调用f2()后,会返回f1,注意这里返回值没有括号,他就是一个地址,你要加括号f1()他才会被调用
右边的调用f2(),返回f1,把f1赋值给a,然后你调用a()这里加括号了,也就是相当于f1(),这才算被调用了
总之,函数名加括号才能被调用
>>> def foo1():
... print("我是函数1")
...
>>> def foo2():
... print("我是函数2")
... return foo1
...
>>> print(foo2)#未加括号,打印函数对象,但是函数未执行
<function foo2 at 0x0000020F8E4E24C0>
>>> foo2()#加上括号,函数执行输出结果
我是函数2
<function foo1 at 0x0000020F8DDAE040>
>>> a=foo2()#用变量a接收foo2函数执行后return后面的结果
我是函数2
>>> a#返回foo1函数对象,此时a()等同于foo1()
<function foo1 at 0x0000020F8DDAE040>
>>>