关于装饰函数

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),是多此一举,还是因为我忽略了什么知识
armstrong007
浏览 1256回答 1
1回答

Nelson_Zhao

说下个人理解,任何函数的出现我们都是希望在调用它时输出结果,你的代码中,如果说按照装饰器的写法来写(把f1=new_fn(f1)改写成@new_fn),我们来看看结果。可以发现我们还没有进行任何调用操作,就出现了装饰器函数中的输出结果。这在语法上没有任何问题,但不符合我们写函数的目的,我们都还没有调用就输出,所以说在装饰器函数中我们写入了fn(x)这样的嵌套函数以后,返回的是函数调用。改写后:可以看出运行后,不会自动输出装饰结果,只会返回函数的引用,这是符合我们的要求的。当调用f1函数时候,才会输出当前的结果。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python