Python语言有一个比较Pythonic的功能,也是一个具有很强大功能的特性,那就是装饰器。
1. Python装饰器的原理
Python中的装饰器是通过利用了函数特性的闭包实现的,所以我们需要了解Python闭包的原理,以及函数的功能特性。
1.1 函数特性
- 函数作为变量传递
def
add
(
x
)
:
return
x
+
1
a
=
add
(
5
)
print
(
a
)
#运行结果:6
- 函数作为参数传递
def
add
(
x
)
:
return
x
+
1
def
execute
(
f
)
:
return
f
(
3
)
print
(
execute
(
add
)
)
#运行结果:4
- 函数作为返回值
def
add
(
x
)
:
return
x
+
1
def
execute
(
x
)
:
return
add
(
x
)
print
(
execute
(
5
)
)
#运行结果:6
- 函数嵌套及跨域访问
def
outer
(
)
:
x
=
1
def
inner
(
)
:
print
(
x
+
1
)
inner
(
)
outer
(
)
#运行结果:2
1.2 闭包原理
闭包其实就是在一个函数中嵌套另一个函数的定义。闭包的作用:包括了外部函数的局部变量,这些局部变量在外部函数返回后也继续存在,并能被内部函数引用。
def
fun1
(
)
:
x
=
1
def
fun2
(
)
:
print
(
x
+
1
)
fun2
(
)
fun1
(
)
#运行结果:2
1.3 装饰器的功能
闭包的另外一种表现形式,主要用于装饰功能,在不改变原代码以及原代码的调用方式,另外的添加额外的功能,就是对已经存在的某些类进行装饰,以此来扩展或者说增强函数的一些功能。
装饰器功能如下所示:
def
func1
(
x
)
:
def
inner
(
)
:
return
'一只机智的'
+
x
(
)
return
inner
@func1
def
func2
(
)
:
return
'小猫'
print
(
func2
(
)
)