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()
原文地址:https://www.cnblogs.com/jxl123/p/9406959.html