为什么我们使用装饰器
装饰器用于在不修改函数代码的情况下为函数提供添加另外的功能。
我们还可以在装饰器的帮助下修改函数。
总结
装饰器在不修改函数的情况下,继承函数原有的功能,添加增强的功能。
Python 装饰器(Decorator)是一个可调用的类对象函数,用于修改函数和类。
对函数“func”和类“C”的引用传递给装饰器,它将返回修改后的函数和类。
正如我们已经学习过的,我们可以在函数内部使用函数的参数。
在本教程中,我们将通过示例逐步了解装饰器。
装饰器示例
def my_decorator(func): # creating decorator def wrap(): print("装饰器内,调用函数之前") func() print("装饰器内,调用函数之后") return wrap # 装饰器需要返回一个函数 @my_decorator # using 使用装饰器 def print_Name(): print("Onitroad") printName() # 调用函数
带参数的装饰器
上面,我们使用了没有参数的装饰器。
现在我们可以轻松地将参数传递给装饰器。
带参数的装饰器示例
def my_decorator(msg='hi'): def this_is_Decorated(func): # *args denoate that the argument passed in the function is keyword argument def wrapper(): print(msg) print("Inside the decorator, before calling the function") func() print("Inside the decorator, after calling the function") return wrapper # decorator needs to return a function return this_is_Decorated @my_decorator(msg='hello') def prin_tName(): print("Onitroad") printName()
on
it
road
.com
如何使用 Python 装饰器
让我们通过一些简单的步骤来了解装饰器。
步骤 - 1:创建一个简单的函数。
让我们简单地创建一个printName函数。
def printName(): print("Onitroad")
步骤 - 2:定义装饰器。
装饰器就像函数一样,它接受一个函数作为参数
# 这是一个装饰器 def my_decorator(func): # 简单的打印出名字 def print_Name(): print("Onitroad")
现在,我们需要使用该参数并在装饰器中添加一些功能。
步骤 3:创建具有某些功能的装饰器。
在这里,我们将在装饰器中定义一个函数。
并在该函数内调用函数的参数。
def my_decorator (func): def wrap(): print("装饰器内,调用函数之前") func() print("装饰器内,调用函数之后") return wrap # 装饰器需要返回一个函数 def print_Name(): print("Onitroad")
我们在装饰器中定义了一个函数 wrap()。
然后我们在 wrap() 函数内部调用了装饰器的参数例如:func。
最后,装饰器返回 wrap() 函数。
步骤 - 4:向原始函数添加功能。
因为我们已经创建了一个装饰器。
现在,我们需要使用装饰器来修改装饰器的功能。
def my_decorator(func): def wrap(): print("装饰器内,调用函数之前") func() print("装饰器内,调用函数之后") return wrap # 装饰器需要返回一个函数 @my_decorator # 使用装饰器 def print_Name(): print("Onitroad")
现在,每当我们调用 print_Name()
函数时,都会首先调用装饰器。
让我们试着理解装饰器的功能。
装饰器要做的是,无论装饰器返回什么,它都会重新分配给“print_Name()”函数。
然后又是 wrap(
) 函数。
现在,让我们看看当我们调用原始函数时会发生什么,例如:print_Name()
。
调用printName()函数后,上述程序的输出为
装饰器内,调用函数之前 Onitroad 装饰器内,调用函数之后
Python装饰器的语法
def my_decorator(f):
这里my_decorator是装饰器,f是函数传入的参数,也是一个函数。
日期:2020-09-17 00:10:31 来源:oir作者:oir