为什么我们使用装饰器

装饰器用于在不修改函数代码的情况下为函数提供添加另外的功能。
我们还可以在装饰器的帮助下修改函数。

总结

装饰器在不修改函数的情况下,继承函数原有的功能,添加增强的功能。

Python 装饰器

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