• 装饰器


    '''装饰器前奏'''

    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的内存地址

  • 相关阅读:
    进程同步中的读者写者问题
    操作系统进程同步习题记录
    基于Python Flask的web日程管理系统
    面向对象第四单元及课程总结博客
    Vimtutor(中文版)学习笔记各章小结
    常用设计模式汇总说明
    图解Apache Mina
    Rocketmq 集群
    读《图解HTTP》有感-(HTTP首部)
    读《图解HTTP》有感-(与HTTP协作的WEB服务器)
  • 原文地址:https://www.cnblogs.com/xiaozeng6/p/13170788.html
Copyright © 2020-2023  润新知