函数的参数和传递参数问题

img


两组代码,左边没输出,右边是我想要的输出
帮忙解释一下为什么
如果有时间再帮我详细且通俗的解释一下函数为什么可以作为参数和函数作为参数被传递的意义
还有我现在被函数可以作为参数这块给卡住了,是不是我太笨了(っ◞‸◟c)

其实很简单的,你看左边的调用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>
>>>