gpt4 book ai didi

python - 如何在python中做一个条件装饰器

转载 作者:IT老高 更新时间:2023-10-28 22:24:39 25 4
gpt4 key购买 nike

是否可以有条件地装饰函数。例如,我想用定时器函数(timeit)装饰函数foo()只有doing_performance_analysis是True(见伪代码下面)。

if doing_performance_analysis:
@timeit
def foo():
"""
do something, timeit function will return the time it takes
"""
time.sleep(2)
else:
def foo():
time.sleep(2)

最佳答案

装饰器只是返回替换的可调用对象,可选地是相同的函数、包装器或完全不同的东西。因此,您可以创建一个条件装饰器:

def conditional_decorator(dec, condition):
def decorator(func):
if not condition:
# Return the function unchanged, not decorated.
return func
return dec(func)
return decorator

现在你可以像这样使用它了:

@conditional_decorator(timeit, doing_performance_analysis)
def foo():
time.sleep(2)

装饰器也可以是一个类:

class conditional_decorator(object):
def __init__(self, dec, condition):
self.decorator = dec
self.condition = condition

def __call__(self, func):
if not self.condition:
# Return the function unchanged, not decorated.
return func
return self.decorator(func)

这里的__call__方法和第一个例子中返回的decorator()嵌套函数的作用一样,封闭的deccondition 参数在这里作为参数存储在实例上,直到应用装饰器。

关于python - 如何在python中做一个条件装饰器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10724854/

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