# -*- coding:utf-8 -*-
def outer(func): def inner(): print("hello") r=func() print("byebye") return r return inner @outer def f1(): print("lvjy") f1() #@的作用: #1.执行outer函数,并且将其下面的函数名当作参数 #2.将outer的返回值重新赋值给f1=outer的返回值
#@符号等价于f2=outer(f1) f2()
原函数带参数:
def decorator(func): def inner(a,b): print("before add") ret=func(a,b) print('a+b=',ret) print("after add") return ret return inner @decorator def add(a,b): return a+b add(1,2)
装饰器可以接收任意个参数
def decorator(func): def inner(*args,**kwargs): print("before operation") ret=func(*args,**kwargs) print(ret) print("after operation") return ret return inner @decorator def add(a,b): return a+b @decorator def double(a): return 2*a add(1,2) double(4)
多个装饰器装饰同一个函数:
装饰器的应用:在登录时进行用户的权限认证