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

    # 最简单的装饰器,运行顺序
    def w1(func):
        print('装饰器正在装饰....')
        print(func)
        def inner():
            print('正在进行权限验证...')
            func()  # f1()
        return inner
    @w1     # 执行到这里就会调用函数w1,并且将f1作为参数传递给w1,并把返回值inner函数赋值给f1
    def f1():
        print('正在运行f1...')
    @w1
    def f2():
        print('正在运行f2...')
    f1()
    
    # 多个装饰器装饰同一个函数的运行顺序
    def w1(func):
        print('正在用w1进行装饰...')
        print(func)
        def inner():
            print('正在运行w1.inner....')
            return '[w1]' + func() + '[w1]'
        return inner
    def w2(func):
        print('正在用w2进行装饰...')
        print(func)
        def inner():
            print('正在运行w2.inner....')
            return '[w2]' + func() + '[w2]'
        return inner
    @w1
    @w2
    def text():
        print('正在运行被装饰的函数...')
        return '流程验证'
    print(text)
    ret = text()
    print(ret)
    
    # 装饰的原函数有参数,那么闭包函数必须保持参数个数一致,并且将参数传递给原方法.
    def w1(func):
        print('正在装饰...')
        def inner(haha):
            print('正在运行闭包...')
            func(haha)
        return inner
    @w1
    def text(name):
        print(f'我叫{name}')
    
    text('李太白')
    
    # 如果装饰的原函数有多个参数或不定长参数
    def w1(func):
        print('装饰中..')
        def inner(*args):  # 此处聚合
            print('运行inner..')
            func(*args)    # 此处打散
        return inner
    @w1
    def sum_(a, b, c):
        print(sum([a, b, c]))
    sum_(11, 12, 13)
    
    # 对带返回值的函数进行装饰
    def w1(func):
        print('正在装饰...')
        def inner(*args):
            print('正在运行inner...')
            return func(*args)
        return inner
    @w1
    def sum_(a, b, c):
        print('正在运行函数...')
        return sum([a, b, c])
    ret = sum_(1, 2, 3)
    print(ret)
    
    # 带参数的装饰器
    def w1(name='齐天大圣'):
        print(f'{name}正在运行w1....')
        def w2(func):
            print(f'{name}正在运行w2....')
            def inner():
                print(f'{name}正在运行inner....')
                func()
            return inner
        return w2
    
    @w1('猪八戒')
    def text():
        print('正在运行text...')
    text()
    
    # 万能装饰器
    def wanneng(func):
        def inner(*args, **kwargs):
            return func(*args, **kwargs)
        return inner
    
    @wanneng
    def text():
        print('正在运行text..')
    
    @wanneng
    def text1(a):
        print(a)
    text()
    text1(9)
    
  • 相关阅读:
    POJ 2723 Get Luffy Out(2-SAT)
    ZOJ 3613 Wormhole Transport
    HDU 4085 Peach Blossom Spring
    NBUT 1221 Intermediary
    NBUT 1223 Friends number
    NBUT 1220 SPY
    NBUT 1218 You are my brother
    PAT 1131. Subway Map (30)
    ZSTU OJ 4273 玩具
    ZSTU OJ 4272 最佳淘汰算法
  • 原文地址:https://www.cnblogs.com/zyyhxbs/p/11072982.html
Copyright © 2011-2022 走看看