装饰器原理

原理:
原有函数:
    def fun_1()

正常调用原有函数:
    fun_1()

现有需要需要在原有函数基础上添加新功能,但是不改变原有函数

法一:

    1、添加新函数(装饰一波)
    def fun_2(fun_1):
        # 嵌套函数。返回函数地址(fun_3 ),调用时才执行
        def fun_3():
        return fun_3                

    2、现在调用方式
        # 装饰
        fun_1 = fun_2(fun_1) # 先执行右边(外函数执行,返回一个内函数地址),再复制给左边(内函数地址)
        # 调用
        fun_1()

法二:
    注解方式
    @fun_2

示例(带参数):
user_status = False # 用户登录了就把这个改成True
def login(func):  # henan
    def inner(*arg, **kwargs):
        _username = 'alex'  # 假装这是DB里存的用户信息
        _password = 'abc!123'  # 假装这是DB里存的用户信息
        global user_status
        if user_status == False:
            pass
        else:
            print("用户已经登录,验证通过")
        if user_status:
            func(*arg, **kwargs)
    return inner
        

def home():
    print('---------首页-----------')        
    
def america():
    print('---------欧美专区-----------')        
    
def japan():
    print('---------日韩专区-----------')        
    
    
#@login  # henan = login(henan)  #inner
def henan(style):    
    print('---------河南专区-----------', style)
    
    
henan = login(henan)    # inner
print(henan)    

#  调用
henan('3p')  # inner()

猜你喜欢

转载自www.cnblogs.com/fmgao-technology/p/9062639.html