一个函数能接受另一个函数作为参数传入,这样的一个函数就是高阶函数
在python中一切皆对象,函数也不例外,函数是可以赋予给一个变量的
在python中,变量可以指向一个函数,函数的参数可以接收一个变量,那么函数的参数也就可以是一个函数
1 def num(x,y): 2 return y(x) 3 4 def f(a): 5 return a ** 2 6 7 num(4,f) 8 16
上边直接调用num()函数,把指向函数f(a)的函数名f,即f实质也是一个变量,作为一个变量传递给了num(x,y)函数中的参数y,这样也得到了正确的答案。所以函数中的参数可以接收一个函数。
总结:高阶函数的实质就是函数的参数能够接收另一个函数
1 def deco(fn): 2 print(‘ha ha ha‘) 3 return fn
1 def myfun(): 2 print(‘call myfun()‘)
#调用deco(fn)函数,把myfun函数作为参数传入,deco(fn)函数会先执行print语句,再返回fn函数,即这里的myfun函数。再让变量f4指向myfun()这个函数对象
1.f4 = deco(myfun) 2. ha ha ha
1 f4() 2 #f4是指向myfun()函数对象的一个变量,因为变量可以指向一个函数,所以执行f4()就可以调用myfun()这个函数 3 call myfun
采用python的魔法也可以实现上边的相同效果
1 @deco 2 def myfun(): 3 print(‘call myfun‘) 4 ha ha ha
1 myfun() 2 call myfun
@deco中的@是语法糖,表示下边定义的函数将会被@后的那个函数所修饰,即myfun()函数会被deco(fn)这个函数所修饰,实质就是执行了myfun = deco(myfun),所以打印出了ha ha ha,并把原来的myfun()函数返回回来,下边执行myfun()时就调用了原来的myfun()函数,输出了call myfun
1 myfun() 2 call myfun
原文:https://www.cnblogs.com/tianshug/p/10921701.html