在这个Python代码中为什么这个f1其实是add(a,b)函数,f2是sub(a,b)函数呢?

代码如下:

img


这是在一本Python入门书中看到的,书中注释f1实际为add(a,b)函数,f2实际为sub(a,b)函数,这是为什么呢?此外,这里13行与15行的add(a,b)函数与sub(a,b)函数都省略了括号里的内容与括号,为什么呢?

add(a,b)和sub(a.b) 的 add 和 sub 其实是保存了函数的变量名,指向了一段代码(函数体)所在的内存空间,你也可以理解为如果不加括号,就不执行函数。所以这样一来就可以解释13行和15行的作用了,这两句根据 calc函数传进来的参数(运算符号)的不同,将add或sub函数在内存的地址返回,赋值给 f1 和 f2 ,这样 f1 和 f2 就指向了 add 和 sub 指向的函数体所在的位置,就可以当做 add 和 sub 那样使用了。

f1=calc('+')
在这里调用calc函数,并传了一个参数'+',
calc函数执行:
opr变量接受参数,
if语句判断,opr是否等于'+'',
相等,执行 return add
也就是返回了add函数。
然后赋值给f1。
#这里涉及一个知识点,当你光写函数名,不加括号的时候,这个函数是不执行的,不加括号表示的是调用函数的地址