строки Python, начинающиеся с @ [duplicate]

Возможный дубликат:
Общие сведения о декораторах Python

Я читал исходный код приложения django, где нашел это

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

Что означает строка, начинающаяся с @?


person Augie    schedule 15.07.2011    source источник
comment
stackoverflow.com/questions/739654/   -  person Andreas Jung    schedule 15.07.2011
comment
+1, потому что это правильный вопрос, потому что вы не знаете, что вам нужно искать декораторы, когда вы впервые видите символ @.   -  person Framester    schedule 23.04.2015
comment
Также правильным дубликатом будет stackoverflow.com/questions/6392739/   -  person Framester    schedule 23.04.2015


Ответы (4)


Ознакомьтесь с объяснениями по декораторам Python. У него есть удивительный ответ, который все объяснит.

person TorelTwiddler    schedule 15.07.2011

Это декоратор. По сути, он оборачивает функцию. Это эквивалентно этому коду:

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

Он используется для проверки аргументов функции (в данном случае request.session), изменения аргументов (он может давать функции другие аргументы, чем она передает) и, возможно, некоторых других вещей.

person Gabi Purcaru    schedule 15.07.2011

Это декоратор, который представляет собой особый тип функции (или в некоторых случаях класс) в Python, которая изменяет поведение другой функции. См. эту статью.

@decorator
def my_func():
    pass

на самом деле просто специальный синтаксис для

def my_func():
    pass
my_func = decorator(my_func)
person Rafe Kettler    schedule 15.07.2011

Это декоратор. Это синтетический сахар для:

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

activities = login_required(activities)
person utdemir    schedule 15.07.2011