本节知识:高阶函数的使用
备注:python全栈_day20_03
1.装饰器
- 装饰器=高阶函数+函数嵌套+闭包.
- 一个高阶函数无法满足装饰器功能.
2.高阶函数
- 函数接受参数是一个函数.
- 函数的返回值是一个函数.
- 满足以上条件任意一个,都可以称之为高阶函数.
#高阶函数代码
1 #满足第一种的高阶函数(函数接受参数是一个函数)
2 import time ##导入时间包
3 def tpp():
4 time.sleep(3) ##设置运行时间
5 print('hello ...')
6 def test():
7 print(tpp) #获得tpp的内存地址
8 start_time = time.time() ##开始时间
9 tpp() #调用tpp函数
10 stop_time = time.time() ##结束时间
11 print('函数的运行时间:%s'%(stop_time-start_time)) ##计算运行时间
12 test()
#满足第二个条件(函数的返回值是一个函数)
def tpp():
print('hello...')
def test():
return tpp
#str = test()
# print(str) #获取tpp函数的内存地址
# str()
foo = test()
foo() #实现了装饰器的,不改变函数名的调用方式
#编写一个装饰器,此方法不成立.多运行了一次
import time
def tpp():
time.sleep(3)
print('hello...')
#不修改foo函数的源代码
#不修改foo函数的调用方式
def test(func):
#print(tpp) #获得tpp的内存地址
start_time = time.time()
func() #调用tpp函数
stop_time = time.time()
print('函数的运行时间:%s'%(stop_time-start_time))
return func
foo = test(tpp)
foo() #多调用了一次
本节知识:函数嵌套于闭包
备注:python全栈_day20_04
1 #函数嵌套
2 def father(name):
3 #print('from father %s'%name)
4 def son():
5 name = '小明_1' #获取当前层的局部变量
6 print('my father is %s'%name)
7 def grandson():
8 print('my grandson is %s'%name)
9 grandson()
10 son()
11 #print(locals(),) #获取当前层的局部变量(函数既是变量)
12
13 father('小明')
本节知识:修饰器框架
备注:python全栈_day20_05
-
@ 语法糖 加在需要修饰函数的前面
1 import time
2 #装饰器框架
3 def timmer(func):
4 def wrapper():
5 #print(func)
6 start_time = time.time() #开始时间
7 func()
8 stop_time = time.time()
9 print('test函数的运行时间%s'%(stop_time-start_time))
10 return wrapper
11
12 @timmer #语法糖 @timmer等于test = timmer(test)
13 def test():
14 time.sleep(3)
15 print('helle.......')
16
17 # test = timmer(test) #返回wrapper()函数的地址//做了赋值操作存在小遐思
18 test() #执行wrapper()函数内容,并执行func()函数,func()函数等于test()
![]()
1 import time
2 #装饰器框架
3 def timmer(func):
4 def wrapper():
5 #print(func)
6 start_time = time.time() #开始时间
7 res = func()
8 return res ####将func返回值赋值给res,res等于test的返回值
9 stop_time = time.time()
10 print('test函数的运行时间%s'%(stop_time-start_time))
11 return wrapper
12
13 @timmer #语法糖 @timmer等于test = timmer(test)
14 def test():
15 time.sleep(3)
16 print('helle.......')
17 return '这是test的返回值'
18
19 # test = timmer(test) #返回wrapper()函数的地址//做了赋值操作存在小遐思
20 #test() #执行wrapper()函数内容,并执行func()函数,func()函数等于test()
21
22 #闭包加上返回值
23 res = test() #test函数其实是运行着wrapper的返回值
24 print(res) #返回None
修饰器添加返回值