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

    装饰器
    开闭原则:
    对功能的扩展开放
    对代码的修改是封闭
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    通用装饰器语法:
     
    def wrapper(fn):
        def inner(*args, **kwargs): # 聚合
            在目标函数之前
            ret = fn(*arg, **kwargs) # 打散
            在目标函数之后
            return ret
        return inner
     
    @wrapper
    def func():
        pass
     
    func()

      

    带参数的装饰器
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    def wrapper_out(参数):
                def wrapper(fn):
                    def inner(*args, **kwargs): # 聚合
                        在目标函数之前
                        ret = fn(*arg, **kwargs) # 打散
                        在目标函数之后
                        return ret
                    return inner
                return wrapper
     
            @wrapper_out(实参)  # 执行的时候. 先执行函数的调用然后使用返回值和前面的@组合成装饰器语法糖
            def func():
                pass

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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    # 就近原则
    @wrapper1
    @wrapper2
    @wrapper3
    def func():
        print("我是可怜的func")
     
    func()
    # 1 2 3  func 3 2 1

      装饰器的应用

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    menu = ("查看""添加""修改""删除""退出")
     
    flag = False  # 没登录
     
     
    def login():
        global flag
        username = input("请输入用户名:")
        password = input("请输入密码:")
        if username == "alex" and password == "123":
            flag = True
            print("登录")
        else:
            flag = False
            print("用户名密码错误")
     
     
    # 登录验证装饰器
    def login_verify(fn):
        def inner(*args, **kwargs):
            # 登录校验
            while 1:
                if flag == True:
                    ret = fn(*args, **kwargs)
                    return ret
                else:
                    print('对不起, 您还没有登录')
                    login()
        return inner
     
    def chakan():
        print("==============================查看")
     
    @login_verify
    def tianjia():
        print("============================添加")
     
    @login_verify
    def xiugai():
        print("=======================修改")
     
    @login_verify
    def shanchu():
        print("=========================删除")
     
     
    while 1:
        for in range(len(menu)):
            print(i+1, menu[i])
     
        num = input("请输入你要执行的菜单:")
        if num == "1":
            chakan()
        elif num == "2":
            tianjia()
        elif num == "3":
            xiugai()
        elif num == "4":
            shanchu()
        elif num == "5":
            print("程序退出中..........")
            exit()
        else:
            print("输入有误. 请重新选择!")

      

  • 相关阅读:
    Spring mvc shiro 整合
    Md5
    常用的加密解密算法
    Base64
    java SHA1WithRSA 算法
    jquery使用on绑定change事件,获取input实时输入值
    C#实现将商品金额小写转换成大写
    IIS配置404页面配置,IIS自定义404页面
    HttpWebRequest 基础连接已经关闭: 接收时发生错误
    js css等静态文件版本控制,一处配置多处更新.net版【原创】
  • 原文地址:https://www.cnblogs.com/heheda123456/p/10202008.html
Copyright © 2011-2022 走看看