博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python装饰器系列(一)
阅读量:5105 次
发布时间:2019-06-13

本文共 981 字,大约阅读时间需要 3 分钟。

高阶函数

一个函数能接受另一个函数作为参数传入,这样的一个函数就是高阶函数

在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

 

 

转载于:https://www.cnblogs.com/tianshug/p/10921701.html

你可能感兴趣的文章
vim工具
查看>>
MySql update inner join!MySql跨表更新 多表update sql语句?如何将select出来的部分数据update到另一个表里面?...
查看>>
我最宏大的个人愿望
查看>>
北漂周记--第5记--拼命编程
查看>>
比赛总结一
查看>>
SpringBoot项目打包
查看>>
JSP的3种方式实现radio ,checkBox,select的默认选择值
查看>>
Linux操作系统 和 Windows操作系统 的区别
查看>>
《QQ欢乐斗地主》山寨版
查看>>
文件流的使用以及序列化和反序列化的方法使用
查看>>
Android-多线程AsyncTask
查看>>
第一个Spring冲刺周期团队进展报告
查看>>
C++函数基础知识
查看>>
红黑树 c++ 实现
查看>>
Android 获取网络链接类型
查看>>
报表服务框架:WEB前端UI
查看>>
5.9UDP客户端服务器-基于OK6410
查看>>
java自学基础、项目实战网站推荐
查看>>
软件包的使用
查看>>
linux中启动与终止lnmp的脚本
查看>>