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()
    用户管理程序

  • 相关阅读:
    华为数据之道03
    机器学习10讲 第二讲
    机器学习10讲 第一讲
    07.TensorFlow双向循环神经网络
    06.TensorFlow循环神经网络
    华为数据之道:华为数据治理2
    线性回归
    MySQL配置文件my.cnf的理解
    Linux怎么查看软件安装路径 查看mysql安装在哪
    hadoop-2.7.4-nodemanager无法启动问题解决方案
  • 原文地址:https://www.cnblogs.com/gpdm/p/6486384.html
Copyright © 2011-2022 走看看