3.30闭包函数、装饰器
闭包函数、装饰器
函数名
-
- 函数名的本质就是函数的内存地址。本质上是一个变量,特殊的变量。
- 函数名+ () :执行函数
- print(函数名):输出函数名在内存空间中的地址
-
-
- 函数名用法
- 可以被引用、赋值
- 函数名可以用作容器型数据元素;
- 函数名可以用作参数;
- 函数名可以作为返回值。
- 函数名用法
-
闭包函数
-
- 内部函数对外部作用域而非全局作用域变量的引用。该内部函数称为闭包函数。
-
- 判断方式:函数名.__colsure__. cell就是闭包。
- 闭包函数运行机制:当函数开始执行时,如果遇到闭包,它有一个机制,他会永远开闭一个内存空间,将闭包中的变量等值放入其中,不会随着函数的执行完毕而消失。
-
- 内部函数对外部作用域而非全局作用域变量的引用。该内部函数称为闭包函数。
1 name = "qiji" 2 3 def wraaper2(n): 4 5 def inner(): 6 print(n) ### 虽然没有inner没有直接调用外部作用域的函数,但是在赋值 n= name 的时候,相当于在函数定义的下一行运行了一栏“n= name”。 7 inner() ###所以inner也算引用了外部作用域的name,所以是闭包函数。 8 print(inner.__closure__) 19 wraaper2(name)
装饰器
-
什么是装饰器:装饰器本质上就是一个python函数,他可以让其他函数在不需要做任何代码变动的前提下,增加额外的功能,装饰器的返回值也是一个函数对象。
- 装饰器作用
-
-
- 没有改变原有函数的调用方式;
- 增添了额外功能而不改变原有函数
- 语法糖
-
- @ 加 装饰器名称
- 装饰器在前,语法糖在后。
-
-

-
- 带有参数的装饰器
1 def timmer(f): 2 def inner(*args,**kwargs): ##闭包函数 ###装饰器中传参时,闭包函数以及闭包函数的被测函数需要传参。以及最后的被测函数有对应参数。 3 start_time = time.time() 4 ret = f(*args,**kwargs) ##被测函数 5 time.sleep(0.3) 6 end_time = time.time() 7 print('此函数的执行效率%s' % (end_time - start_time)) 8 return ret 9 return inner 10 11 @timmer 12 13 def func1(a,b): 14 print(a,b) 15 print('你有病呀,领导,测试我的执行效率干甚。') 16 return 666 17 18 print('************',func1(1,2))
-
- 写装饰器
- 写装饰器名称,写闭包函数inner,写被装饰函数, return闭包函数。
- 写装饰器

2.写装饰器参数,闭包函数、被装饰函数传参。

3.添加被装饰函数之前之后的情况,返回被装饰函数

4.填写语法糖,写在装饰器之后。写被测(被装饰)函数。
浙公网安备 33010602011771号