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())