初学者学到这里一脸懵逼,很多看不懂啊,求大神详解
初学者学到这里一脸懵逼,很多看不懂啊,求大神详解
2018-05-07
纯手打:
以log函数为例(自己去看代码):
理解:设一个函数g,
此时调用log函数,g=log(f),f为乘积函数。
那么请认真思考,g=?
很简单,既然你调用了log函数,那么肯定等于log函数的返回值,也就是return后面的东西。
g=fn。同样的道理,fn=?
在内部函数可以看到,fn等价于一句print语句(先不要管他的内容)+一个return值
fn=print+f(x)。那么f(x)=?
f就是你自己拿过来用的,要代入的一个函数。也就是此题中的乘积函数。
所以整个分析过程就像剥洋葱一样,从外部开始考察,g=?,fn=?,f(x)=?
最终的结论是,那么麻烦为什么要有log这个函数呢?
这是因为,log这个函数,在没有改变 f 乘积函数的代码的前提下,增加了一个print的功能。
我们经常说,牛顿是站在巨人的肩膀上,如果现在给你一个“巨人代码”,但是你没有办法看到“巨人代码”的内容,你需要增加功能的时候,装饰器函数就很好用了,利用“巨人代码”还有一个简单log函数,你就是站在巨人肩膀上面的牛顿了
(之前的答案不小心按到“回答”了,所以不是完整答案,不好意思)
我是这样理解的,希望对你有所帮助:
import time #导入的一个与时间日期有关的库文件之类,反正取日期时间需要它
def performance(f): #函数装饰器,就是一个框架,这个框架要对后面的函数(指定函数)进行包装
??? #实现装饰器功能的代码
@performance #此句相当于在下面的print语句上面一行写“factorial=performance(factorial)”
def factorial(n): #自定义函数,功能:返回数列1到n的乘积
return reduce(lambda x,y: x*y, range(1, n+1))
print factorial(10)
举报