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

    '''装饰器前奏'''

    account={
    "is_authenticated":False ,
    "username":"zxz",
    "password":"zxz123456"
    }
    def login(func):
    if account['is_authenticated'] is False:
    username=input("user:")
    password=input("password:")
    if username==account['username'] and password==account["password"]:
    print("welcome login....")
    account["is_authenticated "]=True
    func()#认证成功,执行工鞥函数
    else:
    print("wrong username or password")
    else:
    print("用户已登录,验证通过。。。")
    func()#认证成功,执行功能函数


    def home():
    print("----首页-----")

    def america():
    print("----欧美专区---")

    def japan():
    print("----日本专区----")

    home()#首页
    america1=login(america)
    print(america)#america 函数没有返回return 所以地址为空
    # america1()#----america None
    
    
    '''装饰器---嵌套函数'''

    account={
    "is_authenticated":False ,
    "username":"zxz",
    "password":"zxz123456"
    }
    def login(func):
    def inner():
    if account['is_authenticated'] is False:
    username=input("user:")
    password=input("password:")
    if username==account['username'] and password==account["password"]:
    print("welcome login....")
    account["is_authenticated "]=True
    func()#认证成功,执行工鞥函数
    else:
    print("wrong username or password")
    else:
    print("用户已登录,验证通过。。。")
    func()#认证成功,执行功能函数
    return inner#返回内部函数名,形成闭包

    def home():
    print("----首页-----")

    def america():
    print("----欧美专区---")

    def japan():
    print("----日本专区----")

    # home()#首页
    # america=login(america)#inner的内存地址
    # print(america)#
    # america()#inner(),先拿到inner函数的地址,然后地址()执行函数

    home()#首页
    america1=login(america)#返回inner地址
    print(america)#america 函数没有返回return 所以地址为空
    # america()
    america1()#执行inner()函数
     
    '''装饰器---原理'''
    
    account={
        "is_authenticated":False ,
        "username":"zxz",
        "password":"zxz123456"
    }
    def login(func):
        def inner():
            if account['is_authenticated'] is False:
                username=input("user:")
                password=input("password:")
                if username==account['username'] and password==account["password"]:
                    print("welcome login....")
                    account["is_authenticated "]=True
                    func()#认证成功,执行工鞥函数
                else:
                    print("wrong username or password")
            else:
                print("用户已登录,验证通过。。。")
                func()#认证成功,执行功能函数
        return inner#返回内部函数名,形成闭包
    
    def home():
        print("----首页-----")
    @login
    def america():
        print("----欧美专区---")
    
    def japan():
        print("----日本专区----")
    
    # home()#首页
    
    america()#inner(),先拿到inner函数的地址,然后地址()执行函数
    
    '''函数定义前加上@login 效果等同于 func=login(func)'''
    # america=login(america)#inner的内存地址
    # print(america)#inner的内存地址

  • 相关阅读:
    js调试工具Console命令详解
    tomcat如何正确的开启远程调试功能
    Cleanup failed to process the following paths错误的解决
    MySQL查看SQL语句执行效率
    MYSQL 的静态表和动态表的区别, MYISAM 和 INNODB 的区别
    JAX-RS之queryparam、PathParam、DefaultValue、FormParam、Context、RestController等
    C语言中的printf函数的输入输出问题
    leetcode 21.Merge Two Sorted Lists ,java
    初识C++ 中的STL
    leetcode 58.Length of Last Word
  • 原文地址:https://www.cnblogs.com/xiaozeng6/p/13170788.html
Copyright © 2011-2022 走看看