• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
山城小跳
博客园    首页    新随笔    联系   管理    订阅  订阅

python之装饰器

装饰器:=====> 要求记住最后的结论

装饰器本质上是一个闭包

作用:

1在不改变原有函数调用的情况下. 给函数增加新的功能.

2直白: 可以在函数前后添加新功能, 但是不改原来的代码

应用场景:

在用户登录的地方, 日志.

通用装饰器的写法:

 def wrapper(fn):   wrapper: 装饰器, fn: 目标函数
            def inner(*args, **kwargs):
                # 在目标函数执行之前.....
                ret = fn(*args, **kwargs)   #   执行目标函数
                # 在目标函数执行之后.....
                return ret
            return inner     千万别加()

        @wrapper
        def target():
            pass

        target()  #  =>  inner()

    一个函数可以被多个装饰器装饰.
    @wrapper1
    @wrapper2
    def target():
        print('我是目标')

    规则和规律 wrapper1 wrapper2 TARGET wrapper2 wrapper1  

案例:

login_flag = False

def login_verify(fn):
    def inner(*args, **kwargs):
        global login_flag
        if login_flag == False:  # ????
            # 这里完成登录校验
            print('还未完成用户登录操作')
            while 1:
                username = input(">>>")
                password = input(">>>")
                if username == "admin" and password == "123":
                    print("登录成功")
                    login_flag = True
                    break
                else:
                    print("登录失败, 用户名或密码错误")
        ret = fn(*args, **kwargs)  # 后续程序的执行
        return ret
    return inner




@login_verify
def add():
    print("添加员工信息")

@login_verify
def delete():
    print("删除信息")

@login_verify
def upd():
    print("修改信息")

@login_verify
def search():
    print("查询员工信息")


add()
upd()
delete()
search()
posted @ 2022-09-25 21:39  字母一哥  阅读(36)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3