我目前正在尝试为基于函数的视图构建自己的装饰器。你知道吗
我理解了装潢师背后的基本概念,但我仍在努力完全理解“幕后”发生了什么。你知道吗
我有一个例子装饰。有人能给我解释一下这里发生了什么或者它是怎么工作的吗?为什么我们需要这么多功能呢?你知道吗
def active_user_required():
def decorator(function):
def wrapper(request, *args, **kw):
if request.user.is_active:
return function(request, *args, **kw)
else:
raise PermissionDenied()
return wrapper
return decorator
理解Python中的decorator的关键在于:Python中的函数是一级对象。这意味着它们可以作为参数传递,也可以作为值返回(等等)。你知道吗
最简单的形式是,decorator将函数作为参数,并返回扩展其功能的新函数。例如,这里有一个decorator
plusone
,它将1添加到原始函数的返回值中:重申一下,
plusone
的要点不是它“加1”,而是它创建了一个新函数(在本例中称为wraps
),并返回。在最后一行,当add(1, 2)
被调用时,实际上是函数wraps
被调用(回忆一下,它调用了原始的add
函数)。你可以证明:(如果没有decorator,也就是说
<function add at 0x...>
)这可以扩展到更复杂的情况,例如采用自己论点的装饰器,但我不认为这些细节是问题的根源。关键的一点是,decorator将函数作为参数,然后返回一个函数(返回的函数几乎总是以某种方式扩展传递的函数)。你知道吗
希望有帮助。你知道吗
相关问题 更多 >
编程相关推荐