一、闭包函数
什么是闭包函数?
闭:函数是一个内部函数
包;指的是该函数包含对外部作用域(非全局作用域)名字的引用。
给函数传值的方式有两种:
1、使用参数直接给函数传值
2、包给函数
1
2
3
4
5
6
|
def
outter(x):
def
inner():
print
(x)
return
inner()
f
-
outter(
10
)
f()
|
二、装饰器
器:工具,而程序中的函数就具备某一种功能的工具
装饰:指的就是为被装饰对象添加额外的功能,就目前知识来看,定义装饰器就是定义一个函数,只不过该函数的功能是用来为其他函数添加额外功能的
其实:
装饰器本身其实可以是任意可以调用的对象
被装饰的对象也可以是任意可以调用的对象
扫描二维码关注公众号,回复:
1606530 查看本文章
为什么有装饰器:
因为软件的维护应该遵循开放封闭的原则,开放封闭的原则指的是:
软件一旦上线运行后,对修改源代码是封闭的,对扩展功能是开放的
装饰器的实现必须遵循两大原则:
1、不修改被装饰对象的源代码
2、不修改被装饰对象的调用方式
装饰器就是在遵循1、2的原则下为被装饰对象添加新功能
1
2
3
4
5
6
7
8
9
10
11
12
13
|
import
time
def
index():
print
(
'welcome to index'
)
time.sleep(
3
)
def
timmer(func):
def
wrapper():
start
=
time.time()
func()
stop
=
time.time()
print
(
'run time is %s'
%
(stop
-
start))
return
wrapper
index
=
timmer(index)
index()
|
装饰器语法糖
在被装饰对象上方,并且是单独一行上写上@装饰器名
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
import
time
def
timmer(func):
#func=最原始的index
def
wrapper(
*
args,
*
*
kwargs):
start
=
time.time()
res
=
func(
*
args,
*
*
kwargs)
stop
=
time.time()
print
(
'run time is %s'
%
(stop
-
start))
return
res
return
wrapper
@timmer
# index=timmer(index)
def
index():
print
(
'welcome to index'
)
time.sleep(
3
)
return
123
@timmer
# home=timmer(home)
def
home(name):
print
(
'welcome %s to home page'
%
name)
time.sleep(
2
)
res
=
index()
home(
'egon'
)
|