zoukankan      html  css  js  c++  java
  • 函数装饰器

    装饰器又称语法糖,以下代码是装饰器没有简写之前:

    # __*__ coding: utf-8 __*__
    __author__ = "David.z"
    user_status = False
    def login(func):
        def inner():#嵌套函数
            _username = "alex"  # 假装这个DB里存的用户信息
            _password = "abc123"  # 假装这是DB里存的用户密码
            global user_status
    
            if user_status == False:
                username = input("user:").strip()
                password = input("password:").strip()
    
                if username == _username and password == _password:
                    print("welcome login...")
                    user_status = True
                else:
                    print("wrong username or password!")
            else:
                print("用户已登录,验证通过。。。")
            if user_status:
                func()
        return inner
    def home():
        print("首页".center(15,"*"))
    def america():
        print("欧美专区".center(15, "*"))
    def japan():
        print("日韩专区".center(15,"*"))
    def henan():
        print("河南专区".center(15,"*"))
    henan = login(henan) #inner
    
    print(henan) #打印出来看看是不是内存地址
    henan() #加上()执行函数

    以下代码是简写之后:

    唯一区别就是在装饰的时候用@login

    # __*__ coding: utf-8 __*__
    __author__ = "David.z"
    user_status = False
    def login(func):
        def inner():#嵌套函数
            _username = "alex"  # 假装这个DB里存的用户信息
            _password = "abc123"  # 假装这是DB里存的用户密码
            global user_status
    
            if user_status == False:
                username = input("user:").strip()
                password = input("password:").strip()
    
                if username == _username and password == _password:
                    print("welcome login...")
                    user_status = True
                else:
                    print("wrong username or password!")
            else:
                print("用户已登录,验证通过。。。")
            if user_status:
                func()
        return inner
    def home():
        print("首页".center(15,"*"))
    def america():
        print("欧美专区".center(15, "*"))
    def japan():
        print("日韩专区".center(15,"*"))
    @login
    def henan():
        print("河南专区".center(15,"*"))
    # henan = login(henan) #inner
    #
    # print(henan) #打印出来看看是不是内存地址
    henan() #加上()执行函数

    最后一点改变,现在是在调用函数里面加了参数调用,为了不影响其他函数的调用。需要在嵌套的函数里加入*args,**kwargs

    # __*__ coding: utf-8 __*__
    __author__ = "David.z"
    user_status = False
    def login(func):
        def inner(*args,**kwargs):#嵌套函数
            _username = "alex"  # 假装这个DB里存的用户信息
            _password = "abc123"  # 假装这是DB里存的用户密码
            global user_status
    
            if user_status == False:
                username = input("user:").strip()
                password = input("password:").strip()
    
                if username == _username and password == _password:
                    print("welcome login...")
                    user_status = True
                else:
                    print("wrong username or password!")
            else:
                print("用户已登录,验证通过。。。")
            if user_status:
                func(*args,**kwargs)
        return inner
    def home():
        print("首页".center(15,"*"))
    def america():
        print("欧美专区".center(15, "*"))
    @login
    def japan(): print("日韩专区".center(15,"*")) @login def henan(style): print("河南专区,--%s".center(15,"*")%style) #henan = login(henan) #inner #japan = login(japan) print(henan) #打印出来看看是不是内存地址 henan("3P") #加上()执行函数 japan()

    两层嵌套函数,并带入参数的装饰器:

    # __*__ coding: utf-8 __*__
    __author__ = "David.z"
    user_status = False
    def login(func2):
        def outer(func):
            def inner(*args, **kwargs):
                _username = "alex"  # 假装这个DB里存的用户信息
                _password = "abc123"  # 假装这是DB里存的用户密码
                global user_status
                if user_status == False:
                    username = input("user:").strip()
                    password = input("password:").strip()
    
                    if username == _username and password == _password:
                        print("welcome login...")
                        user_status = True
                    else:
                        print("wrong username or password!")
                else:
                    print("用户已登录,验证通过。。。")
                if user_status:
                    func(*args, **kwargs)
    
            return inner
        return outer
    def home():
        print("首页".center(15,"*"))
    
    def america():
        print("欧美专区".center(15, "*"))
    @login("weixin")
    def japan():
        print("日韩专区".center(15,"*"))
    @login("qq")
    def henan(style):
        print("河南专区,---%s".center(15,"*")%style)
    
    henan("3P")
    japan()
  • 相关阅读:
    事件类型
    program的发展史与两个数学方法
    字符统计与基本正则
    bom与dom
    css长度单位及颜色表示
    grid学习
    position定位的认识
    remark:node端口的close-wait
    css background属性设置
    Promise之我发现
  • 原文地址:https://www.cnblogs.com/davidz/p/9143961.html
Copyright © 2011-2022 走看看