码迷,mamicode.com
首页 > 其他好文 > 详细

装饰器

时间:2018-06-17 19:54:14      阅读:177      评论:0      收藏:0      [点我收藏+]

标签:function   fun   简单   als   rgs   import   turn   pre   art   

这个比较复杂
def before(func):                       #定义装饰器
    def wrapper(*args, **kwargs):
        print(Before function called.)
        return func(*args, **kwargs)
    return wrapper

def after(func):                         #定义修装饰器
    def wrapper(*args, **kwargs):
        result = func(*args, **kwargs)
        print(After function called.)
        return result
    return wrapper

@before
@after
def test(*args,**kwargs):                              #同时使用两个装饰器装饰函数
    print(args)
test(123)  # 调用被装饰的函数
print(test(123))

多个装饰器装饰一个函数

# 带参数的装饰器:(相当于开关)为了给装饰器传参
F = True  # 为True时就加上装饰器
# F = False  # 为False时就去掉装饰器


def outer(flag):
    def wrapper(func):
        def inner(*args, **kwargs):
            if flag:
                print(‘before‘)
                ret = func(*args, **kwargs)
                print(‘after‘)
            else:
                ret = func(*args, **kwargs)
            return ret
        return inner
    return wrapper


@outer(F)   # outer(F) = wrapper -> @wrapper -> f1 = wrapper(f1)
def f1():
    print(‘in f1‘)

@outer(False)   # outer(F) = wrapper -> @wrapper -> f2 = wrapper(f2)
def f2():
    print(‘in f2‘)


f1()
f2()
print(f1())

  

import time def door(func): def wapper(): start_time=time.time() func() time.sleep(3) stop_time=time.time() print(abs(start_time-stop_time)) return wapper @door def test1(): print(in the test1:) test1()

简单的装饰器 test1=door(test1)

import time

def foo(func):
    def wapper(*args,**kwargs):
        print(args,end=‘‘)
        func(*args)
        print(kwargs)
    return wapper
@foo                #test=foo(test)
def test(*args):
    print(‘in test 1:‘,args)
test(123,456,s=‘袁珂‘)

  带参函数

装饰器

标签:function   fun   简单   als   rgs   import   turn   pre   art   

原文地址:https://www.cnblogs.com/yuanke98/p/9193425.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!