以@开头的python行

时间:2011-07-15 18:44:52

标签: python

  

可能重复:
  Understanding Python decorators

我正在阅读django应用程序源代码,我找到了这个

@login_required
def activities(request = None,\
            project_id = 0,\
            task_id = 0,\
            ...

以@开头的行是什么意思?

4 个答案:

答案 0 :(得分:5)

这是装饰师。它的作用基本上是包装功能。它等同于以下代码:

def activities(request = None,\
            project_id = 0,\
            task_id = 0,\
            ...
activities = login_required(activities)

它用于检查函数参数(在这种情况下为request.session),修改参数(它可能给函数提供的其他参数不是它通过的),也可能是其他一些东西。

答案 1 :(得分:4)

它是一个装饰器,它是Python中一种特殊类型的函数(在某些情况下是类),它修改了另一个函数的行为。请参阅this article

@decorator
def my_func():
    pass

实际上只是

的特殊语法
def my_func():
    pass
my_func = decorator(my_func)

答案 2 :(得分:3)

请查看Python Decorators Explained。它有一个惊人的答案,可以解释一切。

答案 3 :(得分:0)

这是装饰师。这是一个语法糖:

def activities(request = None,\
            project_id = 0,\
            task_id = 0,\
            ...

activities = login_required(activities)