zoukankan      html  css  js  c++  java
  • day 12 python的装饰器

    1·装饰器

    ①装饰器的作用:在不改变函数的基础上,在函数的前后添加新的功能

    ②使用原则:开放封闭原则(开放:对扩展时开放的;封闭:对修改是封闭的)

    2·语法糖:@装饰函数

    3·本节涉及的库:time   (import time)

    print(time.tim())#获取当前时间

    print(time.sleep(时间间隔))  #让程序在执行到这里的时候停一会儿s

    装饰器的固定模式:

    例:

    import time

    def timmer(f):     #装饰器函数  ,f为被装饰函数

      def inner( ):

        start = time.time()

        ret = f( )

        end = time.time()

        return ret

      return inner

    @timmer    #语法糖,装饰器函数的调用方法   func= timmer(func)-->inner

    def func():    #被装饰函数

      time.sleep(0.1)

      print('博主真帅!')

      return '无与伦比' 

    带有参数的装饰器函数:

    import time

    def timmer(f):     #装饰器函数

      def inner(*args,**kwargs):

        start = time.time()

        ret = f(*args,**kwargs)

        end = time.time()

        return ret

      return inner

    @timmer    #语法糖,装饰器函数的调用方法   func= timmer(func)-->inner

    def func(a,b):    #被装饰函数

      time.sleep(0.1)

      print('博主真帅!')

      return '无与伦比' 

    需要理解装饰函数的在程序中的执行顺序:

    装饰器的进阶:(函数的停止调用,及三层函数)

    当存在多个参数时,500个函数的时候,如何停止函数的调用

    import time

    flage = True

    def wrapper(flage):

     def timmer(f):

      def inner(*args,**kwargs):

       if flage:

        start =time.time()

        ret  = f(*args,**kwargs)

        end = time.time()

        print(end-start)

        return ret

       else:

        ret = f(*args,**kwargs)

        print(‘函数在这里:’)

      return inner

     return timmer 

    @wrapper(flage)     #相当于wrapper(flage) = timmer,先执行wrapper(),再调用函数timmer

    def func(a.c):
      rtime.sleep(0.3)

      print('11')

    func(1,2)

    多个函数装十一个函数:

    def wrapper1(f):#f =func

      def inner1():

        print('wrapper1 after om func')

        ret = f()

        print('wrapper1 after om func')

        return inner1

    def wrapper2(f): #f=inner1

      def inner2():

        print('wrapper2 after om func')

        ret = f()

        print('wrapper2 after om func')

        return inner2

    def wrapper3(f): #f =inenr2

      def inner3():

        print('wrapper3 after om func')

        ret = f()

        print('wrapper3 after om func')

        return inner3

    @wrapper3  #func =wrapper3(func)=wrappr3(func) = inner3

    @wrapper2 #func =wrapper2(func)= wrapper2(inner1) = inner2

    @wrapper1 #func = wrapper1(func)-->inner1

    #三个装饰器的使用顺序,先执行最接近被装饰的那个装饰器

    def func():
      print('niubi')

    func()  #-->inner3()-->inner2()-->inner1()

    #应用:

    可应用于记录用户的来访情况

    计算这个函数的执行时间

  • 相关阅读:
    [bzoj4197][Noi2015]寿司晚宴
    [bzoj3531][Sdoi2014]旅行
    [洛谷P1430]序列取数
    [洛谷P2044][NOI2012]随机数生成器
    [洛谷P2839][国家集训队]middle
    [洛谷P3937]Changing
    [bzoj3532][Sdoi2014]Lis
    [洛谷P2590][ZJOI2008]树的统计
    [洛谷P4311]士兵占领
    [洛谷P1879][USACO06NOV]玉米田Corn Fields
  • 原文地址:https://www.cnblogs.com/p-t-m/p/11489304.html
Copyright © 2011-2022 走看看