@Tihon49

Что это за конструкция: shop, _ = Shop.objects.get.... бла-бла-бла....?

В проекте онлайн магазина на django увидел вот такую конструкцию:

shop, _ = Shop.objects.get_or_create(name=data['shop'], user_id=request.user.id)


что происходит после знака "=" понятно, но не понятно почему записано таким образом: shop, _ =
  • Вопрос задан
  • 148 просмотров
Решения вопроса 3
@AlexPyth
Разработчик ПО
Скорее всего, метод get_or_create возвращает массив (кортеж) с двумя значениями, где первый элемент записывается в переменную shop, а второй просто не нужен, поэтому просто игнорируется с помощью _

UPD. Вот что нашёл в документации: https://djbook.ru/rel1.7/ref/models/querysets.html...
Ответ написан
Комментировать
Tomio
@Tomio
backend developer (python, php)
По-другому это называется "развернуть кортеж". То есть, в зависимости от того, сколько значений в кортеже
t = ('one', 'two', 'three')
можно их по порядку вынести в переменные
a, _, b = t
>> a
>> 'one'
>>_
>>'two'
>>b
>>'three'

Символ '_' тоже можно использовать в качестве переменной. Но по негласному соглашению им принято делать заглушки, если какое-то значение не нужно. Например, если перебираете словарь (ключ-знаение) и ключ вам не важен, то можно написать так
for _, value in some_dict.items():
    pass
Ответ написан
phaggi
@phaggi
лужу, паяю, ЭВМы починяю
В том и дело, что то, что после «=» очевидно возвращает кортеж из двух результатов, и, грубо говоря, 0-й (первый по счёту) элемент кортежа «записывается в переменную» shop, а 1-й (второй по счёту) - игнорируется. Знак подчеркивания в качестве имени переменной - это как-бы «фиктивная переменная».
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы