为了账号安全,请及时绑定邮箱和手机立即绑定

初学者学到这里一脸懵逼,很多看不懂啊,求大神详解

初学者学到这里一脸懵逼,很多看不懂啊,求大神详解

正在回答

3 回答

我懂了 就是函数外面加个叫装饰器的东西 装饰器里面再写个函数 可以在中间加东西 最后返回的值是 装饰器里面装饰函数的值即原函数的值

0 回复 有任何疑惑可以回复我~

纯手打:

以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函数,你就是站在巨人肩膀上面的牛顿了

(之前的答案不小心按到“回答”了,所以不是完整答案,不好意思)

8 回复 有任何疑惑可以回复我~

我是这样理解的,希望对你有所帮助:

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)


3 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
python进阶
  • 参与学习       255533    人
  • 解答问题       3038    个

学习函数式、模块和面向对象编程,掌握Python高级程序设计

进入课程

初学者学到这里一脸懵逼,很多看不懂啊,求大神详解

我要回答 关注问题
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号