zoukankan      html  css  js  c++  java
  • 装饰器基础

    小知识:

    1,time模块

    import time

    time.sleep(5)         #5秒内什么都不干

    print('等了你5秒')

    time.time()是从1970年到现在过的秒数。

    import time:

    a = time.time()

    ...

    b = time.time()

    a - b 就是中间...执行的时间秒数。

    装饰器的标准用法:

     

    上面是一个在常用函数中增加程序运行计时功能的案例。使用了闭包的方法。多理解一下。

    这时,timmer就是一个装饰器。

    def timmer(f):            #装饰器的名称

      def inner(a):          

        start = time.time()

        ret = f(a)            #装饰了这个函数。如果需要在被装饰函数中增加返回值,前面必须有一个ret 去接受f()的返回值

        end  = time.time()

        print(end - start)

        return ret          #为了在被装饰函数中增加返回值,在这里将f()的返回值返回给time(f)

      return inner          #返回了闭包的结果。注意一定不能加括号,不然就不能返回inner的内存地址了。

    @timmer

    def func(a):

      time.sleep(0.01)

      print(‘老板好,同事好,大家好’)

      return '新年好'

    #func = timmer(func)    #同上面的@timmer

    func()

    一,装饰器的开放封闭原则:

      开放:对拓展是开放的(可以对函数和功能进行拓展,而不修改源代码)

      封闭:对修改是封闭的(不能直接修改已经写好了的代码)

      意义:维护代码的稳定性,在大公司中团体编程的时候非常重要。

      使用装饰器就可以做到不修改原本功能的情况下,还可以给函数添加功能。

           而且还不影响原来函数的名字。

    二,装饰器书写的模式:

      上述代码def func()处可以市容如下写法的简写:(但是记得先把装饰器写在需要定义的函数上面。)

        @timmer    #@装饰器函数名

        def func()

    三,装饰器的进阶设置:

     注意以上操作在原有基础上增加了函数func(a,b)的传入多个位置参数和多个默认参数的功能,并且能将函数func(a)的返回结果正常传出来。

    上面这个图多去记忆,以后写装饰器的时候只需要自己规定func功能,并且在装饰器固定位置增加装饰器功能就可以了。运用自如。

    以前我有写好的atm程序,但是没有增加数据库的读写功能的,在这里应该就可以用到这个装饰器了,不用每个函数都去添加固定的功能了,

    避免了不稳定性,并且也很节约时间。虽然新写的程序暂时还用不到,但是未来总会有一天会用到这个东西的。

    四 装饰器的固定模式:

    def $装饰器的名称(f):

      def inner(*args,**kwargs):

        ret = f(*args,**kwargs)

        return ret

      return inner

    @ $装饰器的名称

    def $被装饰的函数名(#可以包含任意数量任意类型的形参):

      ...

      return ...  #可以返还,也可以不返还

    #也可以这样写: 

    func = $装饰器的名称(func)

    ret = func(#形参)

      

     

  • 相关阅读:
    【机器学习】均方误差(MSE)和均方根误差(RMSE)和平均绝对误差(MAE)
    python自动化测试框架nose
    python单元测试之unittest框架使用总结
    【flask】flask讲解
    Python查询手机号码归属地几种方法
    数据库的备份与恢复
    python中OrderedDict的使用
    python struct 结构体
    【Linux】linux-nfs挂载
    【机器学习】方差为何除以n-1
  • 原文地址:https://www.cnblogs.com/wanghanyao/p/10177260.html
Copyright © 2011-2022 走看看