这是我初次接触装饰器,先从初学者的角度介绍装饰器,关于装饰器的应用场景举例,后面再补充。
1.装饰器的作用
- 装饰器可以让一个函数在不做任何变动的情况下新增额外的功能。
如下代码,func_name函数是打印传入函数的函数名,f1函数就是打印一个字符串。
def func_name(func):
"""打印传入函数的函数名"""
print(func.__name__)
def f1():
print("这是待装饰的函数f1")
现在要求,每次调用一个函数的时候,都要打印该函数的函数名,那么我们可以在f1函数内部作如下修改:
def f1():
func_name(f1)
print("这是待装饰的函数")
f1() #f1 这是待装饰的函数
看似很简单,但是实际应用场景中可能有几十个函数需要作这样的修改,都在函数内部作改动是很麻烦的,也容易出错,那么我们可以利用装饰器在f1函数的外部进行修改。
2.写一个装饰器
如下代码就是对1中的f1函数作一个修改。可以看到我们定义了两个函数func_name和函数f1,其中我们用func_name函数装饰了函数f1。
那么在装饰的过程中,f1发生了怎么样的变化呢。首先我们要定义一个装饰器func_name,然后在待装饰的函数正上方输入@func_name(注意,这里是@+函数名,不带括号)。
当