函数的装饰器

------------------------------函数的装饰器和推导式-----------------------------

1.装饰器

def bar():
    print(1)
def base():
    print(2)
bar = base
bar()
#输出的结果为2
def func(arg):
    def inner():
        return arg()
    return inner

def index():
    print('123')
    return '666'

v1 = index() #123
v2 = func(index)
index =666 #在此之前已经将index函数赋值给arg所以不影响函数的结果
v3=v2()
#输出的结果为
#123
#123
  • 装饰器:在不改变原函数内部代码基础上,在函数执行之前和执行之后自动执行某个功能

    def func(arg):
        def inner():
            print('before')
            v = arg()
            print('after')
            return v
        return inner
    #第一步:执行func函数并将下面的函数参数传递,相当于:func(index)
    #第二步:将func的返回值重新赋值给下面的函数名。index = func(index)
    @func
    def index():
        print('123')
        return '666'
    
    print(index)
    
  • 装饰器的基本结构

    #装饰器的编写
    def x(func):
        def y():
            ret = func()
            return ret
        return y
    #装饰器的应用
    @x
    def index():
        pass
    @x
    def manage():
        pass
    #执行函数
    v = index()
    print(v)
    
  • 装饰器应用案例

    import time
    def wrapper (func):
        def inner():
            start_time = time.time() #函数之前的一个操作
            v = func()
            end_time = time.time() #函数之后的一个操作 
            print(end_time - start_time)
            return v
        return inner
    @wrapper
    def func1():
        time.sleep(2)
        print(1223)
    func1()
    
  • 装饰器应用场景:想要为函数扩展功能时,可以选择装饰器

  • 记住

    • 装饰器的编写格式
    def 外层函数(参数):
    	def 内层函数(*args,**kwargs):
            return 参数(*arfs,**kwargs)
        return 内层函数
    
    • 装饰器的应用格式

      @外层函数
      def index():
          pass
      insex()
      

3.模块

import time
v = time.time() #获取当前时间,返回值
time.sleep(2) #代码睡两秒,无返回值
posted @ 2020-07-04 22:37  小杨的冥想课  阅读(177)  评论(0编辑  收藏  举报