# -*- 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)


多个装饰器装饰同一个函数:

 

装饰器的应用:在登录时进行用户的权限认证

 

posted on 2018-03-08 11:20  sonofthesea  阅读(90)  评论(0编辑  收藏  举报