先来看一个程序:
def f1(): print(2) return 1 def f2(a): print(3) return a print(f2(f1()))
这个程序,在调用时,f2会先等待f1调用完毕,返回1之后,再进行调用,所以会输出2、3、1,但是若这样改写程序
def f1(): print(2) return 1 def f2(f): print(3) return f() print(f2(f1))
这里我们会发现,给f2传的实参从f1()变成了f1,那这两有什么区别呢?简单来说就是:
1. f1()表示调用函数,并返回结果
2. f1仅仅表示这个函数对象,并不执行函数调用
那这里就涉及到一个关键的点了,在Python中,一切皆为对象,当然,函数也不例外。所以f1实际上是表示这个函数的对象,当我们print(f1)的时候,会输出这个对象所在的地址。
那么,既然把它作为一个对象来看待,那么它和数字、字符串等标准对象其实就无本质差异了,所以,一个函数可以作为:
1. 可以作为被引用的对象
2. 可以作为类型容器的元素
3. 可以作为参数传给另一个函数
4. 可以作为函数的返回值
在上面那个程序中,把f1作为对象(也就是f1的地址)传给了f2,f2会执行到return 语句的时候,才会调用f1,所以输出结果为3、2、1。由此,可以引出回调函数的定义:
把一段可执行的代码像参数传递那样传给其他代码,而这段代码会在某个时刻被调用执行,这就叫做回调。
标签:f1,f2,return,函数,Python,print,回调,def From: https://www.cnblogs.com/haruyuki/p/17975383