关于python装饰器,可以让任何装饰器接收任何参数的装饰器
在stackoverflow(https://stackoverflow.com/que...)上看到了一个可以使任何装饰器接收任何参数的装饰器。
def decorator_with_args(decorator_to_enhance):
"""
这个函数将被用来作为装饰器.
它必须去装饰要成为装饰器的函数.
休息一下.
它将允许所有的装饰器可以接收任意数量的参数,所以以后你不必为每次都要做这个头疼了.
saving you the headache to remember how to do that every time.
"""
# 我们用传递参数的同样技巧.
def decorator_maker(*args, **kwargs):
# 我们动态的建立一个只接收一个函数的装饰器,
# 但是他能接收来自maker的参数
def decorator_wrapper(func):
# 最后我们返回原始的装饰器,毕竟它只是'平常'的函数
# 唯一的陷阱:装饰器必须有这个特殊的,否则将不会奏效.
return decorator_to_enhance(func, *args, **kwargs)
return decorator_wrapper
return decorator_maker
@decorator_with_args
def decorated_decorator(func, *args, **kwargs):
def wrapper(function_arg1, function_arg2):
print "Decorated with", args, kwargs
return func(function_arg1, function_arg2)
return wrapper
@decorated_decorator(42, 404, 1024)
def decorated_function(function_arg1, function_arg2):
print "Hello", function_arg1, function_arg2
decorated_function("Universe and", "everything")
问题一:装饰器decorator_with_args的功能是什么,是怎么现实的,可以展开讲一下么?
问题二:将装饰器decorator_with_args代码改成下面这样,为什么就实现不了了。
def decorator_with_args(decorator_to_enhance):
def decorator_maker(func,*args, **kwargs):
return decorator_to_enhance(func, *args, **kwargs)
return decorator_maker
问题三:整个装饰器的是怎么运转的?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
看看这篇文章http://python.jobbole.com/87309/