• 装饰器(重点)



    装饰器(重点):

    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("----河南专区----")
  • 相关阅读:
    使用iScroll时,input等不能输入内容的解决方法
    用jquery 写的类似微博发布的效果
    jq 中each的用法 (share)
    Android SDK 安装中组件的离线安装方法 (share)
    HTML5开发手机应用viewport的作用
    Android开发环境搭建及配置phoneGap
    flipsnap手机屏幕水平滑动框架
    解读网站PR值
    文档碎片
    解读SEO 黑帽白帽 (share)
  • 原文地址:https://www.cnblogs.com/wc-chan/p/8306827.html
Copyright © 2020-2023  润新知