• python学习笔记(二十七)-- 装饰器


    装饰器:不改变原来函数的代码和调用方式,给函数添加新功能。
    装饰器,本身也是一个函数
    添加装饰器格式 @函数名
    加上装饰器后,就可以扩展没有的功能,比如说打印函数名、运行时间等,就不用写重复的代码
    #给函数加上打印函数名的功能
    def func_name(func):
        def f(*args,**kwargs):
            print("[DEBUG]:Enter the function %s()"%(func.__name__))
            func(*args,**kwargs)
        return f
    
    # 给函数打印运行时间
    def timer(func):
        import time
        def f(*args,**kwargs):#带参数
            start_time = time.time()
            result = func(*args,**kwargs) #获取函数返回值
            run_time = time.time() - start_time
            print("函数 %s() 运行时间是 %s"%(func.__name__,run_time))
            return result #return函数返回值
        return f
    
    # 带返回值的函数
    @timer
    def sum(a,b):
        return a+b
    
    @timer
    def say(name,count):
        print('%s hello! %s'%(name,count))
    
    say('nana',5)
    result = sum(2,5)
    print("sum函数的返回值是%s"%result)

     例子:判断是否登陆的装饰器

    import os
    
    def login():
        username = input("请输入用户名")
        password = input("输入密码")
        if username == 'nn' and password == '123':
            with open(username,'a+') as fw:
                return True #走到这里就为真
        return False #不然就为假
    
    def is_login(func):
        def new_func(*args,**kwargs):
            username = args[0]
            if os.path.exists(username):#如果登陆成功这个文件会被创建,所有判断存在与否
                result = func(*args,**kwargs)
                return result
            else:
                if login():
                    result = func(*args,**kwargs)
                    return result
                else:
                    print("登陆失败,重新登录!")
        return new_func
    
    @is_login
    def buy(username):
        print("购买")
    
    buy('nana')
  • 相关阅读:
    第三次作业-有进度条圆周率计算
    第一周作业
    24点
    Cuber Sorting
    P1827 [USACO3.4]美国血统 American Heritage
    P4387 【深基15.习9】验证栈序列
    P2058 海港
    P4017 最大食物链计数
    P2196 挖地雷
    放苹果问题
  • 原文地址:https://www.cnblogs.com/yanyan-/p/11082185.html
Copyright © 2020-2023  润新知