以@开头的Python行

2 投票
4 回答
1476 浏览
提问于 2025-04-16 21:38

可能重复的问题:
理解Python装饰器

我在阅读一个Django应用的源代码时发现了这个

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

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

4 个回答

4

这是一个装饰器,它是一种特殊的函数(在某些情况下也可以是类),用来改变另一个函数的行为。想了解更多,可以看看这篇文章

@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),还可以修改参数(也就是说,它可能会给函数传递不同于原本的参数),还有可能有其他一些功能。

3

请查看一下 Python 装饰器的解释。里面有个很棒的回答,可以把所有内容都讲清楚。

撰写回答