zoukankan      html  css  js  c++  java
  • 装饰器

    这个比较复杂
    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='袁珂')
    

      带参函数

  • 相关阅读:
    curl 带 body
    import com.sun.org.apache.xml.internal.security.utils.Base64问题
    动静分离业务解决网页请求不被串改
    java 主动信任证书
    IO 多路复用详解
    spanish-1.1
    spring data JPA entityManager查询 并将查询到的值转为实体对象
    微信二维码支付报错
    军训入营学生发言稿
    电位器控制两个 LED 灯交替闪烁
  • 原文地址:https://www.cnblogs.com/yuanke98/p/9193425.html
Copyright © 2011-2022 走看看