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

  • 相关阅读:
    STM32F401+nRF24L01无线传输音频(对讲机原型)
    Keil MDK STM32系列(五) 使用STM32CubeMX创建项目基础结构
    Keil MDK STM32系列(四) 基于抽象外设库HAL的STM32F401开发
    Keil MDK STM32系列(三) 基于标准外设库SPL的STM32F407开发
    PlatformIO下的STM32F4xx项目配置
    nRF24L01基于FIFO TX队列的发送性能优化
    个人发展计划IDP 与Smart原则
    IDEA Maven 项目默认编译项目为JDK 1.5
    投资 学习 成长 判断力 面对挫折
    投资 价值 道德 长期主义(5,10,20年)三观
  • 原文地址:https://www.cnblogs.com/xiaozeng6/p/13170788.html
Copyright © 2011-2022 走看看