装饰器

不带参数装饰器

def my_log(func):
    def wrapper():
        log='call%s'.func.__name__
        print (log)
        return func()
    return  wrapper

@my_log
def check():
    print ('now is 10:00:00')

运行结果

>>>f=check()
call check
now is 10:00:00

被装饰函数带参数传递

def my_log(func):
    def wrapper(*args,**kw):
        log='call%s'.func.__name__
        print (log)
        return func(*args,**kw)
    return  wrapper

@my_log
def check(now):
    print ('now is %d:00:00'%now)

运行结果

>>>f=check(12)
call check
now is 12:00:00

当@装饰器后有参数时

def get_parameter(*args,**kwargs):  # 工厂函数,用来接受@get_parameter('index.html/')的'index.html/'
    def log_time(func):
        def make_decorater():
            print(args,kwargs)
            print('现在开始装饰')
            func()
            print('现在结束装饰')
        return make_decorater
    return log_time
 
@get_parameter('index.html/')
def test():
    print('我是被装饰的函数')
    

 

>>>test()
('index.html/',) {}
现在开始装饰
我是被装饰的函数
现在结束装饰

 

posted @ 2019-09-12 15:37  一了然  阅读(108)  评论(0)    收藏  举报