zoukankan      html  css  js  c++  java
  • python基础学习12----装饰器

    装饰器可以在不修改目标函数代码的前提下, 在目标函数执行前后增加一些额外功能

    例如有一个简单的函数

    import time
    def func1():
    print("这是一个简单的函数")
    time.sleep(2)

    想给这个函数增加一个计算用时的功能,那么可以利用装饰器

    让该函数使用装饰器,即在函数的定义的上方添加@函数名,如下,其相当于将func1=outer(func1)写到后边的程序中

    至于函数外的参数在函数中使用的原因是闭包

    import time
    def outer(f): def inner(): start = time.time() f() end = time.time() print(end-start) return inner @outer#func1=outer(func1) def func1(): print("这是一个简单的函数") time.sleep(2) func1()
    #输出
    这是一个简单的函数

    2.000551223754883

    若是一个有参数的函数需要装饰则

    def outer(f):
        def inner(x,y):
            start = time.time()
            f(x,y)
            end = time.time()
            print(end-start)
        return inner
    
    @outer#func1=outer(func1)
    def add(x,y):
        print(x+y)
        time.sleep(2)
    
    add(1,2)
    

    若想要在装饰器中加一些其他语句如判断语句来控制某些功能是否使用

    import time
    
    def judge(flag=True):
        def outer(f):
            def inner(x,y):
                start = time.time()
                f(x,y)
                end = time.time()
                print(end-start)
            return inner
        if flag==True :
            print("这是一个功能")
        return outer
    
    @judge()#judge()其实相当于outer,除此之外可以在此添加参数
    def add(x,y):
        print(x+y)
        time.sleep(2)
    
    add(1,2)
    

      

  • 相关阅读:
    element-UI树形table父子级全选
    VUE父组件调用子组件方法
    elementUI-radio(单选框)label数据类型问题
    微信小程序下载wod,exc,pdf,并显示进度条
    微信小程序js跳转到外部页面
    微信使用e-char图表采坑
    微信登录授权
    外部二维码进入小程序
    js将对象属性作为参数传递
    vscode 个人配置
  • 原文地址:https://www.cnblogs.com/sfencs-hcy/p/9615651.html
Copyright © 2011-2022 走看看