2011-07-15 146 views
1

可能重复:
Understanding Python decorators蟒蛇线

我正在读一本Django应用程序的源代码,我觉得这

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

什么行以@开头?

+0

http://stackoverflow.com/questions/739654/understanding-python-decorators –

+1

+1,因为它是一个有效的问题,因为你不知道,你必须当您第一次看到“@”符号时搜索装饰器。 – Framester

+0

也是正确的复制将是http://stackoverflow.com/questions/6392739/what-does-the-at-symbol-do-in-python – Framester

回答

4

这是一个装饰,它是用Python来修改另一个函数的行为的一种特殊类型的函数(或类,在某些情况下)。见this article

@decorator 
def my_func(): 
    pass 

实际上只是

def my_func(): 
    pass 
my_func = decorator(my_func) 
5

这是一个装饰。它所做的基本上是包装这个功能。它相当于与此代码:

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

它用于检查函数的参数(在这种情况下request.session),修改参数(它可以得到比函数它传递其他参数),以及可能其他一些东西。

0

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

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

activities = login_required(activities)