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
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)
怎么样:
我想您甚至可以将其包装成一个decorator,该decorator将接受一个布尔标志和另一个decorator,并且仅当标志设置为
True
时才应用后者:decorator是简单的可调用函数,可以返回替换函数、包装器或完全不同的东西。因此,您可以创建一个条件修饰符:
现在您可以这样使用它:
decorator也可以是一个类:
这里,
__call__
方法扮演着与第一个示例中返回的decorator()
嵌套函数相同的角色,这里的闭包dec
和condition
参数作为参数存储在实例上,直到应用装饰符。decorator只是应用于另一个函数的函数。您可以手动应用它:
相关问题 更多 >
编程相关推荐