装饰器:
定义:本质是函数,功能:(装饰其他函数)就是为其他函数添加附加功能;
原则:1、不能修改被装饰函数的源代码
2、不能修改被装饰的函数的调用方式
实现装饰器知识储备:
1、函数即“变量”
2、高阶函数
a:把一个函数名当作实参传给另外一个函数
b:返回值中包含函数名(不修改函数的调用方式)
3、嵌套函数
高阶函数+嵌套函数 =》装饰器
import time def timer(func): def warper(*args,**kwargs): start_time =time.time() func() stop_time=time.time() print('the func run time is %s' %(stop_time-start_time)) return warper @timer def test1(): time.sleep(3) print('in the test1') test1()
匿名函数:不需要起名字(内存回收)
calc = lambda x:x*3 print(calc(3))
#函数即“变量” # def foo(): # print('in the foo') # bar() # foo() #---------------------- def bar(): print('in the bar') def foo(): print('in the foo') bar() foo() #----------------------------------------------- def foo(): print('in the foo') bar() def bar(): print('in the bar') foo()
嵌套函数
# #函数嵌套:用def声明 # def foo(): # print('in the foo') # def bar(): #具有局部变量的特性 # print('in the bar') # # bar() # # foo() # # #函数调用 # def test1(): # test2() # # test1() #作用域从内向外找,一层一层的找 x=0 def grandpa(): def dad(): x =2 def son(): x=3 print(x) son() dad() grandpa()