Python装饰器的执行过程简析

以前对Python装饰器的执行顺序理解有点问题,如果使用了装饰器,那么装饰器将在任何函数执行前执行,比如下面的代码:
def dec(func):
	print('i\'m decrorator')
	def wrapper(*args, **kw):
		return func(*args, **kw)
	return wrapper

@dec
def test(arg):
	print('i\'m %s' % arg)


print('start')
t = test('admin')
执行结果是: i'm decrorator start i'm admin 可以看到“start”不是第一个输出的,以上面的为例,装饰器执行的时候是这样的: test = dec(test),此时test已经被装饰为dec(test),然后是执行print('start'),然后再是执行test函数,参数为“admin”,将结果赋值给t