装饰器
定义:
本质是函数,(装饰其他函数)就时为其他函数添加附加功能
原则:
1、不能修改被装饰的函数的源代码
2、不能修改被装饰的函数的调用方式
实现装饰器的知识储备:
1、函数即“变量”
2、高阶函数
a:把一个函数名当做实参传给另一个函数(在不修改被装饰函数源代码的情况下为其添加功能)
b:返回值中包含函数名(不修改函数调用方式)
3、嵌套函数
高阶函数+嵌套函数 ==装饰器
def logger():
print('logging')
def test1():
logger()
pass
def test2():
logger()
pass
test1()
test2()

import time def timmer(func): def warpper(*args,**kwargs): start_time = time.time() func() stop_time = time.time() print("the func time is %s"%(stop_time-start_time)) return warpper @timmer def test1(): time.sleep(3) print("in the test1") test1()

#Author:Brill #EXP1 def foo(): print('in the foo') bar() def bar(): print("in the bar") foo() #EXP2 import time def bar(): time.sleep(3) print("in the bar ") def test1(func): start_time = time.time() func() #run time stop_time = time.time() print("the func run time is %s"%(stop_time-start_time)) test1(bar) #Exp3 import time def bar(): time.sleep(3) print("in the bar ") def test2(func): print(func) return func #print(test2(bar)) bar = test2(bar) bar() #run bar

#Author:Brill import time def timer(func): #timer(test1) func = test1 def deco(): start_time = time.time() func() #run test1 stop_time = time.time() print("the func run time is %s" % (stop_time - start_time)) return deco @timer # test1 = timer(test1) def test1(): time.sleep(3) print("in the test1") @timer def test2(): time.sleep(3) print("in the test2") test1() #--->deco test1()

#Author:Brill import time def timer(func): #timer(test1) func = test1 def deco(*args,**kwarge): start_time = time.time() func(*args,**kwarge) #run test1 stop_time = time.time() print("the func run time is %s" % (stop_time - start_time)) return deco @timer # test1 = timer(test1) def test1(): time.sleep(1) print("in the test1") @timer # test2 = timer(test2) = deco test2=test(name) def test2(name,age): time.sleep(3) print("test2:",name,age) test1( ) #--->deco test2("alex",22)
斐波那契数列:

#Author:Brill def fib(max): n,a,b,=0,0,1 while n<max: print(b) a,b = b ,a+b n= n+1 return 'Done' fib(100)