首页 » Web前端 » phpfuncthondecorate技巧_Python 中的装饰器

phpfuncthondecorate技巧_Python 中的装饰器

访客 2024-12-06 0

扫一扫用手机浏览

文章目录 [+]

在理解 装饰器 的观点之前,先理解一下 Python 中装饰器 的强大功能。

Decorators 许可根据须要修正功能,而无需永久修正它。
更大略地说,装饰器许可在调用函数之前和之后进行修正。

为了学习装饰器,必须理解以下两个观点。

phpfuncthondecorate技巧_Python 中的装饰器

1. 函数是工具,它们可以分配给变量并通报给其他函数并从其他函数返回。
2. 函数可以在其他函数中定义,子函数可以捕获父函数的局部状态(闭包)。

基本上,装饰器将可调用工具作为参数,进行一些修正并返回另一个可调用工具。

phpfuncthondecorate技巧_Python 中的装饰器
(图片来自网络侵删)

Callable 是实现分外方法 __call__() 的任何工具

具有双下划线的方法(如 __call__())也称为 dunders。

现在实现装饰器。
下面,函数 mul 是一个普通函数,它返回两个数的乘法。
def mul(a,b):

def mul(a,b): return abprint(mul(10,10))

让在装饰器的帮助下进行一些变动。
def decorate (func):def decorate (func): def wrapper(a,b): print('----') ans=func(a,b) print(ans) print('----') return wrapper@decoratedef mul(a,b): return abprint (mul(10,20))

在上面的示例中,函数“decorate”是一个装饰器。
它接管 func 函数作为参数。
每个装饰器都该当具有包装器功能。
可以给包装函数起任何名字。
在上面的例子中,“wrapper”是包装器函数。
在包装器函数中,进行所有修正。
正如在上面的例子中看到的,在调用我们的函数之前和之后只添加了两个 print() 语句。

要将装饰器运用于函数,必须利用 @ decorator_name。
可以在上面程序的第 10 行中看到这一点。
@符号只是一个句法糖。
实际上,调用装饰器如下:

decorateor(mul(a, b))

现在让看看输出:

敏锐的不雅观察者一定已经把稳到,装饰器内部的包装函数参数与它装饰的函数参数相同。
为了战胜这个限定,使装饰器更通用,可以处理任意数量的参数,可以利用 ,

functior(args, kwargs)

关键要点:

1. 装饰器接管函数作为参数并返回另一个函数。

2.装饰器必须具有包装功能,并应返回。

3.修正应在包装器功能内部进行。

4. 要将装饰器运用于函数,请在定义函数之前将 @ 与装饰器的名称一起利用。

标签:

相关文章