zoukankan      html  css  js  c++  java
  • day 11

    1、装饰器:用来为被装饰器对象添加新功能的工具(本身是可调用的任何对象,被修饰的对象也可以是任何可调用的对象)
           器:具备某一功能的工具
           装饰:指的是为被修饰对象添加新功能
    
         开放封闭原则:封闭指的是对修改封闭,对扩展开放
         装饰器的实现必须遵循两大原则:
            1. 不修改被装饰对象的源代码
            2. 不修改被装饰器对象的调用方式
    
        装饰器的目标:就是在遵循1和2原则的前提下为被装饰对象添加上新功能
    
    
    2、无参装饰器的模板:
    
    def outter(func):
        def wrapper(*args,**kwargs):
            res=func(*args,**kwargs)
            return res
        return wrapper
    
    
    3、有参装饰器的模板:
    def auth(x,y,z):
        def outter(func):
            def wrapper(*args,**kwargs):
                res=func(*args,**kwargs)
                return res
            return warapper
        return outter
    
    4、装饰器的语法糖:在被装饰对象正上方单独一行写@装饰器的名字
     运行原理:python解释器一旦运行到@装饰器的名字,就会调用装饰器,
            然后将被装饰函数的内存地址当作参数传给装饰器,
            最后将装饰器调用的结果赋值给原函数名
    
    5、叠加装饰器:
    
    6、默写代码
    补充:所有的数据类型的值自带布尔值,可以直接当作条件去用,只需要记住布尔值为假的那一些值即可(0,空,None)
    """
    # dic_name = {"name": None}
    # def login(engine="file"):
    #     def outter(func):
    #         def wrapper(*args, **kwargs):
    #             if dic_name["name"]:
    #                 print("无需再次登入")
    #                 res = func(*args, **kwargs)
    #                 return res
    #             if engine == "file":
    #                 name = input("请输入用户名:").strip()
    #                 password = input("请输入登入密码:").strip()
    #                 if name == "jxl" and password == "123":
    #                     print("登入成功")
    #                     dic_name["name"] = name
    #                     res = func(*args, **kwargs)
    #                     return res
    #                 else:
    #                     print("登入失败")
    #             elif engine == "mysql":
    #                 print("基于mysqlr认证")
    #             elif engine == "ladp":
    #                 print("基于ldap认证")
    #
    #         return wrapper
    #
    #     return outter
    #
    #
    # import time
    #
    #
    # @login("file")
    # def index():
    #     time.sleep(3)
    #     print("dfskdhfjsd")
    # index()
    #
    # @login("file")
    # def foo():
    #     print("213123")
    #     return  123
    #
    # print(foo())
    #
    #
    
    #
    # dic_nme = {"name": None}
    #
    #
    # def auth(engilsh="file"):
    #     def outter(func):
    #         def wrapper(*args, **kwargs):
    #             if dic_nme["name"]:
    #                 print("此用户已经登入,无需再次登入")
    #                 res = func(*args, **kwargs)
    #                 return res
    #             if engilsh == "file":
    #                 name = input("name is :").strip()
    #                 password = input("password is :").strip()
    #                 if name == "jxl" and password == "123":
    #                     print("登入成功")
    #                     print("基于file认证")
    #                     dic_nme["name"] = name
    #                     res = func(*args, **kwargs)
    #                     return res
    #                 else:
    #                     print("密码或账户错误")
    #             elif engilsh == "mysql":
    #                 print("基于mysql认证")
    #             elif engilsh == "ladp":
    #                 print("基于ladp认证")
    #
    #         return wrapper
    #
    #     return outter
    #
    #
    # @auth("file")
    # def foo():
    #     print("fsdfsd")
    #
    #
    # foo()
    #
    #
    # @auth("file")
    # def foo1():
    #     print("ddfsf")
    #
    #
    # foo1()
  • 相关阅读:
    android.permission
    Android 记住密码和自动登录界面的实现(SharedPreferences 的用法)
    人要怎样活在现实生活中
    viewpager---01
    Android ViewPager多页面滑动切换以及动画效果
    【205】C#实现远程桌面访问
    【204】显示3D大球球
    【203】利用UltraISO制作和刻录光盘映像的方法
    【202】ThinkPad手势&快捷键
    【201】SeaDAS代码
  • 原文地址:https://www.cnblogs.com/jxl123/p/9406959.html
Copyright © 2011-2022 走看看