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),我们来看看结果。
可以发现我们还没有进行任何调用操作,就出现了装饰器函数中的输出结果。这在语法上没有任何问题,但不符合我们写函数的目的,我们都还没有调用就输出,所以说在装饰器函数中我们写入了fn(x)这样的嵌套函数以后,返回的是函数调用。
改写后:
可以看出运行后,不会自动输出装饰结果,只会返回函数的引用,这是符合我们的要求的。
当调用f1函数时候,才会输出当前的结果。
添加回答
举报
0/150
提交
取消