Хобрук: Ваш путь к мастерству в программировании

что означает этот оператор в django `reduce(operator.and_, query_list)`



Ответы:


1

filter — это обычный метод Django Model Manager, так что объяснять нечего.

reduce — это встроенная функция, похожая на приведенный ниже код:

def reduce(func, items):
    result = items.pop()
    for item in items:
        result = func(result, item)

    return result

Где func — определяемая пользователем функция.

operator.or_ — это функция стандартной библиотеки Python, которая является оболочкой для оператора or. Это похоже на этот код:

def or_(a, b):
    return a | b

Например:

reduce(operator.or_, [False, False, True])

Вернется True.

В контексте вашего примера операторы or и and перегружены, и поэтому он должен возвращать новый запрос, состоящий из более мелких частей, объединенных оператором or или and.

18.04.2013
  • Главное, что я хочу знать, это operator.and_ что это делает 18.04.2013
  • Большое спасибо! в нескольких строках вы объяснили, чего не могли сделать несколько примеров. Результат = items.pop() объясняет, почему я получил ошибку о типах, когда я перебираю список объектов и пытаюсь уменьшить свойство этого объекта. 11.07.2017

  • 2

    Документация Python описывает reduce как:

    Применение функции двух аргументов кумулятивно к элементам итерации слева направо, чтобы уменьшить итерацию до одного значения.

    Таким образом, это позволяет нам легко и быстро выполнять одну функцию (которая принимает два параметра, т. е. добавлять a к b) множество раз над набором данных с помощью одного простого вызова функции.

    В случае этой проблемы Django мы хотим построить один объект QuerySet, взяв список отдельных объектов запроса (Q) и кумулятивно выполнив над ними операцию AND или OR, чтобы получить один запрос.

    Например, для запросов [Q(1), Q(2), Q(3)] мы хотим сначала OR Q(1) с Q(2), а затем OR результат этой операции с Q3 дать нам окончательный запрос.

    Мы привыкли видеть операции в python (такие как сложение или вычитание), написанные как A + B (или в случае or'ing: A | B), но python также предоставляет функции для их выполнения (например, or(a, b) и and(a, b), которые будут делать то же самое). ). Они полезны в подобных ситуациях, поскольку их можно применять в качестве параметров для других методов. Такие функции, как «сложение», «вычитание» и т. д. находятся в модуле operator.

    Таким образом, используя модуль operators, мы видим, что reduce(operator.and_, query_list) берет каждый объект Q в нашем списке и объединяет его с текущими результатами предыдущих объектов в списке.

    18.04.2013
  • есть ли способ увидеть строковое представление объектов Q в запросе _list, чтобы увидеть, какой запрос он создает. когда я набираю query_list в shell_plus, он дает мне объект Q с некоторым идентификатором. я хочу знать, какой запрос его здания 18.04.2013
  • Новые материалы

    Создание кнопочного меню с использованием HTML, CSS и JavaScript
    Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

    Внедрите OAuth в свои веб-приложения для повышения безопасности
    OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

    Классы в JavaScript
    class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

    Как свинг-трейдеры могут использовать ИИ для больших выигрышей
    По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..

    Как построить любой стол
    Я разработчик программного обеспечения. Я люблю делать вещи и всегда любил. Для меня программирование всегда было способом создавать вещи, используя только компьютер и мое воображение...

    Обзор: Машинное обучение: классификация
    Только что закончил третий курс курса 4 часть специализации по машинному обучению . Как и второй курс, он был посвящен низкоуровневой работе алгоритмов машинного обучения. Что касается..

    Разработка расширений Qlik Sense с qExt
    Использование современных инструментов веб-разработки для разработки крутых расширений Вы когда-нибудь хотели кнопку для установки переменной в приложении Qlik Sense? Когда-нибудь просили..