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

  • 相关阅读:
    在线免费学习全世界的课程
    【安卓】imageView.scaleType取centerCrop后,再用padding时显示异常?
    win8+VS2012搭建OpenGL超级宝典的环境
    leetcode第一刷_Plus One
    HASH JION AND NESTED JION
    Hive创建外部表以及分区
    Android数字签名解析(一)
    Alex 的 Hadoop 菜鸟教程: 第3课 Hadoop 安装教程
    用C#生成不反复的随机数
    Swift数据类型及数据类型转换
  • 原文地址:https://www.cnblogs.com/gpdm/p/6486384.html
Copyright © 2011-2022 走看看