gpt4 book ai didi

python - 装饰器函数语法python

转载 作者:太空宇宙 更新时间:2023-11-03 12:26:19 28 4
gpt4 key购买 nike

我正在学习 python 中的装饰器函数,并且正在研究 @ 语法。

这是一个装饰器函数的简单示例,它调用了相关函数两次。

def duplicator(func):
@functools.wraps(func)
def wrapper(*args, **kwargs):
func(*args, **kwargs)
func(*args, **kwargs)
return wrapper

如果我没理解错的话,应该是:

@duplicator
def print_hi():
print('We will do this twice')

相当于:

print_hi = duplicator(print_hi)
print_hi()

但是,让我们考虑一下我是否转向一个更复杂的示例。例如。我不想调用该函数两次,而是想调用它用户定义的次数。

使用此处的示例:https://realpython.com/primer-on-python-decorators/

def repeat(num_times):
def decorator_repeat(func):
@functools.wraps(func)
def wrapper_repeat(*args, **kwargs):
for _ in range(num_times):
value = func(*args, **kwargs)
return value
return wrapper_repeat
return decorator_repeat

我可以通过以下方式调用它:

@repeat(num_times=4)
def print_hi(num_times):
print(f"We will do this {num_times} times")

但是,这肯定不等同于:

print_hi = repeat(print_hi)

因为我们有额外的参数num_times

我误会了什么?是否等同于:

print_hi = repeat(print_hi, num_times=4)

最佳答案

对于 repeat 装饰器,等价于:

print_hi = repeat(num_times=4)(print_hi)

这里,repeat 接受一个 num_times 参数并返回 decorator_repeat 闭包,它本身接受一个 func 参数并返回 wrapper_repeat 闭包。

关于python - 装饰器函数语法python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52606101/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com