python学习笔记-装饰器

定义:装饰器本质是函数(装饰其他函数)就是为其他函数添加附加功能

原则:
1、不能修改被装饰的函数的源代码
2、不能修改被装饰的函数的调用方式

实现装饰器的知识储备:

1、函数既变量

def foo():    
  print("in the foo")    
  bar()

def bar():    
  print("in the bar")

foo()

输出:
in the foo
in the bar

2、高阶函数
a:把一个函数名当做实参传给另一个函数。(不修改被装饰的函数代码,为其增加新的功能)

import 
timedef bar():    
  time.sleep(1)    
  print("in the bar")

def test1(func):    
  start_time = time.time()    
  func()    
  end_time = time.time()   
  print("use time is %s" % (end_time - start_time))

test1(bar)

输出:
in the bar
use time is 1.0030739307403564

b:返回值中包含函数名。(不修改函数的调用方式)

import time
def bar():    
  time.sleep(3)    
  print("in the bar")
def test(func):    
  print(func)   
  return funca = test(bar)

a()

输出:

in the bar

3、嵌套函数

def foo():
    print("in the foo")
    def bar():
        print("in the bar")
    bar()

foo()

输出:
in the foo
in the bar

通过高阶函数+嵌套函数 实现 装饰器

import time

def timer(func):
    def bar(*args, **kwargs):
        start_time = time.time()
        func(*args, **kwargs)
        end_time = time.time()
        print("the func run time is %s" % (end_time-start_time))
    return bar

@timer
def test1():
    time.sleep(1)
    print("in the test1")

@timer
def test2(name):
    time.sleep(2)
    print("in the test2 %s" % name)


test1()
test2("alex")

输出:
in the test1
the func run time is 1.0011811256408691
in the test2 alex
the func run time is 2.0028319358825684

你可能感兴趣的:(python学习笔记-装饰器)