zoukankan      html  css  js  c++  java
  • 装饰器(重点)


    装饰器(重点):

    1、定议:本身是一个函数,为被装饰对象添加上新功能(如为原来的没有认证功能的函数增加认证功能)
    2、原则:1) 不修改被装饰对象的源代码 2) 不修改被装饰对象的调用方式
    3、实现软件开发原则:
    封闭:已实现的功能代码块不应该被修改
    开放:对现有功能的扩展开放
    4、组成:
    1)高阶函数 + 嵌套函数 》》》》就是装饰器
    2)实现方式:
    1、高阶函数:
    函数名做为实参传给另外一个函数的形参(在不修改被装饰函数源代码的情况下为其添加功能)
    反回值中包含函数名(不修改函数的调用方式)
    2、嵌套函数:
    把函数体作为内层函数,DEF外套一层函数,return 反回一个装饰函数的形参名

    5、总结:
    把被装饰的函数名作为实参传组装饰器函数,使用嵌套函数,return反回一个装饰函数的形参名,再把执行
    装饰函数结果赋值给一个与被装饰函数名同名变量(或在被装饰函数前@装饰器函数名)

    6、举例:
    def login(func): #把要执行的模块从这里传进来

    def inner():#再定义一层函数
    _username = "alex" #假装这是DB里存的用户信息
    _password = "abc!23" #假装这是DB里存的用户信息
    global user_status

    if user_status == False:
    username = input("user:")
    password = input("pasword:")

    if username == _username and password == _password:
    print("welcome login....")
    user_status = True
    else:
    print("wrong username or password!")

    if user_status == True:
    func() # 看这里看这里,只要验证通过了,就调用相应功能

    return inner #用户调用login时,只会返回inner的内存地址,下次再调用时加上()才会执行inner函数

    @login
    def america():
    #login() #执行前加上验证
    print("----欧美专区----")

    def japan():
    print("----日韩专区----")

    @login
    def henan():
    #login() #执行前加上验证
    print("----河南专区----")
  • 相关阅读:
    使用U盘做最官方纯净的高压缩级别的w10系统,享受急速5秒开机
    Nginx设置浏览器缓存
    --with-http_sub_module模块
    --with-http_random_index_module模块
    --with-http_stub_status_module模块
    Nginx常见问题
    secure_link_module模块
    nginx编译安装新模块
    使用Ubuntu搭建Web服务器
    [BJDCTF 2nd]假猪套天下第一
  • 原文地址:https://www.cnblogs.com/wc-chan/p/8306827.html
Copyright © 2011-2022 走看看