Django Python - 变量名后面的 _ 做什么

问题描述 投票:0回答:1

抱歉我的解释不好,但我正在像这样审查我教授的代码:


              user, _ = User.objects.get_or_create(
                      name = serializer.data['name'],
                      email = serializer.data['email'],
                      password = make_password(serializer.data['password']))

当我从中删除“,_”时,我无法访问它的对象(例如:名称)。我在做 “user.name”,但我不能没有“,_”有人可以解释为什么会这样。 这是我第一次来这里所以呵呵

我想通过分配我创建的对象的用户访问名称字段

python django django-rest-framework
1个回答
0
投票

_
是一个变量,实际上
_
是一个有效的变量名称。
_
通常用于“丢弃”变量:我们对结果并不真正感兴趣的变量。因此,您编写的代码相当于:

user, created = User.objects.get_or_create(
    name=serializer.data['name'],
    email=serializer.data['email'],
    password=make_password(serializer.data['password']),
)

除了我们现在将其分配给名为

created
而不是
_
的变量。

发生的事情是我们“unpack”结果的2元组。事实上,

.get_or_create(…)
 [Django-doc]返回一个2元组:

返回

(object, created)
的元组,其中object是检索或创建的对象,created是一个布尔值,指定是否创建了新对象。

如果你写:

x, y = some_2_tuple

它“解包”

some_2_tuple
,其中
x
被指定为 2 元组的第一项,而
y
被指定为第二项。这可以扩展到任意数量的变量。有关更多信息,请参阅 扩展的可迭代拆包 [pep]

当我从中删除“,_”时,我无法访问它的对象(例如:名称)。我正在做“用户名”

如果删除

, _
,它会显示为
user = User.objects.get_or_create(…)
,因此
user
是一个 2 元组。然后您可以使用
user[0]
访问用户对象,但在这里解包可能更方便。

© www.soinside.com 2019 - 2024. All rights reserved.