谁能告诉我装饰器的代码执行逻辑
def log(f):
def fn(*args, **kw):
print 'call ' + f.__name__ + '()...'
return f(*args, **kw)
return fn
@log
def f(x,y):
return x+y
print f(1,2)
这段代码里,@log是一个高阶函数,执行以后会先返回一个fn的函数对象,然后按照顺序,不是应该再手动执行fn(),再执行f()吗?为什么这段代码里,直接print f(1,2)了,跳过了执行fn()这段,,求大神解答。