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

    如果在函数f1上方使用了“@+装饰器函数名”(以上图为例),当在程序中调用f1()时,执行过程如下:

    1》执行outer函数

    2》将f1赋值给func

        此时的func()相当于:

           print("F1")

    3》将inner赋值给f1

    4》执行inner函数,即为

         print("before")

         print("F1")

         print("after")

     带参数的函数加装饰器的书写方式:

    有多个参数的函数加装饰器的写法(所有函数都可以应用此类装饰器):

    装饰器应用实例--用户管理程序

    LOGIN_USER = {"is_login":False}
    
    
    def outer(func):
        def inner(*args):
            if LOGIN_USER['is_login']:
                r = func()
                return r
            else:
                print("请登录")
        return inner
    
    @outer
    def order():
        print("欢迎%s登录"%LOGIN_USER['current_user'])
    
    
    @outer
    def changepwd():
        print("欢迎%s登录"%LOGIN_USER['current_user'])
    
    @outer
    def manager():
        print("欢迎%s登录"%LOGIN_USER['current_user'])
    
    
    """
    #不用装饰器的写法
    def order():
        if LOGIN_USER['is_login']:
            print("欢迎%s登录"%(LOGIN_USER['current_user']))
        else:
            print("请登录")
    
    def changepwd():
        if LOGIN_USER['is_login']:
            print("欢迎%s登录"%(LOGIN_USER['current_user']))
        else:
            print("请登录")
    
    
    def manager():
        if LOGIN_USER['is_login']:
            print("欢迎%s登录"%(LOGIN_USER['current_user']))
        else:
            print("请登录")
    """
    
    
    def login(username, pwd):
         if username == "alex" and pwd == "123":
            LOGIN_USER['is_login'] = True
            LOGIN_USER['current_user'] = username
            manager()
    
    
    def main():
        while True:
            inp = input("1,后台管理;2,登录")
            if inp == '1':
                manager()
            elif inp == '2':
                username = input("请输入用户名")
                pwd = input("请输入密码")
                login(username, pwd)
    
    
    main()
    用户管理程序

  • 相关阅读:
    linux下的防火墙iptables
    oracle 学习
    关于测试计划制定
    Android APP性能测试笔记(一)
    adb报错问题解决方法
    Android studio安装与配置
    领导能力与领导力
    ADB安装及使用
    Advanced-REST-client
    性能测试体系-测试分析及调优
  • 原文地址:https://www.cnblogs.com/gpdm/p/6486384.html
Copyright © 2011-2022 走看看