我正在读一本Django应用程序的源代码,我觉得这
@login_required
def activities(request = None,\
project_id = 0,\
task_id = 0,\
...
什么行以@开头?
我正在读一本Django应用程序的源代码,我觉得这
@login_required
def activities(request = None,\
project_id = 0,\
task_id = 0,\
...
什么行以@开头?
请看看Python Decorators Explained一个特殊的语法。它有一个惊人的答案,将解释一切。
这是一个装饰,它是用Python来修改另一个函数的行为的一种特殊类型的函数(或类,在某些情况下)。见this article。
@decorator
def my_func():
pass
实际上只是
def my_func():
pass
my_func = decorator(my_func)
这是一个装饰。它所做的基本上是包装这个功能。它相当于与此代码:
def activities(request = None,\
project_id = 0,\
task_id = 0,\
...
activities = login_required(activities)
它用于检查函数的参数(在这种情况下request.session
),修改参数(它可以得到比函数它传递其他参数),以及可能其他一些东西。
这是一个装饰。这是一个语法糖:
def activities(request = None,\
project_id = 0,\
task_id = 0,\
...
activities = login_required(activities)
http://stackoverflow.com/questions/739654/understanding-python-decorators –
+1,因为它是一个有效的问题,因为你不知道,你必须当您第一次看到“@”符号时搜索装饰器。 – Framester
也是正确的复制将是http://stackoverflow.com/questions/6392739/what-does-the-at-symbol-do-in-python – Framester