我在Django中查看了@login_required
的源代码,但我看不懂一行:
lambda u: u.is_authenticated
我不知道u
的来源。
完整代码:
def login_required(function=None, redirect_field_name=REDIRECT_FIELD_NAME, login_url=None):
actual_decorator = user_passes_test(
lambda u: u.is_authenticated,
login_url=login_url,
redirect_field_name=redirect_field_name
)
if function:
return actual_decorator(function)
return actual_decorator
答案 0 :(得分:1)
基本上,它是可以在一行中定义的函数。让我们以您的示例为例:lambda u: u.is_authenticated
它们的关键字lambda
告诉Python您正在定义一个匿名函数。 u
是函数的参数。返回值是冒号后面的所有内容(在这种情况下为u.is_authenticated
)。因此,lambda u: u.is_authenticated
等同于:
def some_function(u):
return u.is_authenticated
Lambda函数可以定义多个参数,以逗号等分隔。在这里阅读有关它们的信息:Lambda (Anonymous) Functions in Python。