装饰器:
定义:本质是函数,功能:(装饰其他函数)就是为其他函数添加附加功能;
原则: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()