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

关于装饰函数

关于装饰函数

armstrong007 2016-08-12 17:00:11
def f1(x):     return x*x  def f2(x):     return x*x*x  def f3(x):     return x*x*x*x  print f1(9) print f3(9) def new_fn(f):     print 'call '+f.__name__+'()'     return f f1=new_fn(f1) print f1(9) 上面是我写的,在定义def new_fn(f)的时候 我没有定义教程中的 def fn(x),但是我的结果也是正确的。这是否代表教程中def fn(x),是多此一举,还是因为我忽略了什么知识
查看完整描述

1 回答

?
Nelson_Zhao

TA贡献21条经验 获得超4个赞

说下个人理解,任何函数的出现我们都是希望在调用它时输出结果,你的代码中,如果说按照装饰器的写法来写(把f1=new_fn(f1)改写成@new_fn),我们来看看结果。

//img1.sycdn.imooc.com//57afeb8b000147b309480940.jpg

可以发现我们还没有进行任何调用操作,就出现了装饰器函数中的输出结果。这在语法上没有任何问题,但不符合我们写函数的目的,我们都还没有调用就输出,所以说在装饰器函数中我们写入了fn(x)这样的嵌套函数以后,返回的是函数调用。

改写后:

57afeca10001184e05000516.jpg

可以看出运行后,不会自动输出装饰结果,只会返回函数的引用,这是符合我们的要求的。

57afeca30001479e05000494.jpg

当调用f1函数时候,才会输出当前的结果。


查看完整回答
反对 回复 2016-08-14
  • 1 回答
  • 0 关注
  • 1255 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信