以@开头的行是什么意思

python lines that start with @

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Understanding Python decorators

我在读一个django应用程序的源代码

1
2
3
4
5
@login_required
def activities(request = None,\
            project_id = 0,\
            task_id = 0,\
            ...

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


是个装饰工。它所做的基本上是包装函数。它与此代码等效:

1
2
3
4
5
def activities(request = None,\
            project_id = 0,\
            task_id = 0,\
            ...
activities = login_required(activities)

它用于检查函数参数(在本例中是request.session),修改参数(它可以给函数提供除传递之外的其他参数),以及其他一些东西。


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

1
2
3
@decorator
def my_func():
    pass

只是一种特殊的语法

1
2
3
def my_func():
    pass
my_func = decorator(my_func)


请查看python装饰说明。它有一个惊人的答案可以解释一切。


它是一个装饰工。它是一种合成糖,用于:

1
2
3
4
5
6
def activities(request = None,\
            project_id = 0,\
            task_id = 0,\
            ...

activities = login_required(activities)