高阶函数
一个函数能接受另一个函数作为参数传入,这样的一个函数就是高阶函数
在python中一切皆对象,函数也不例外,函数是可以赋予给一个变量的
在python中,变量可以指向一个函数,函数的参数可以接收一个变量,那么函数的参数也就可以是一个函数
1 def num(x,y):2 return y(x)3 4 def f(a):5 return a ** 26 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 @deco2 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