Вопрос об эффективном отображении аргументов

Приведенный ниже код упростил мне использование Pymongo.

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

Так как я новичок, я пробовал несколько раз, но меня это не удовлетворило, поэтому мне нужен совет.

Мне очень жаль, что код запутан. Просто обратитесь к нему,

и дайте мне знать, есть ли какие-нибудь библиотеки или простой пример. Спасибо!

def find_(self, collection, find_value=None, projection=None, sort=None, skip=None, limit=None, multi_array=None, cursor=False):
    if sort is None:
       if skip is None and limit is None:
           cursor_result = self.db_path[collection].find(find_value if projection is None else find_value, projection)
       if skip is not None and limit is None:
           cursor_result = self.db_path[collection].find(find_value if projection is None else find_value, projection).skip(skip)
       if skip is None and limit is not None:
           cursor_result = self.db_path[collection].find(find_value if projection is None else find_value, projection).limit(limit)
       if skip is not None and limit is not None:
           cursor_result = self.db_path[collection].find(find_value if projection is None else find_value, projection).skip(skip).limit(limit)
    else:
       arg = tuple((key, val) for key, val in sort.items())
       if skip is None and limit is None:
           cursor_result = self.db_path[collection].find(find_value if projection is None else find_value, projection).sort(arg)
       if skip is not None and limit is None:
           cursor_result = self.db_path[collection].find(find_value if projection is None else find_value, projection).sort(arg).skip(skip)
       if skip is None and limit is not None:
           cursor_result = self.db_path[collection].find(find_value if projection is None else find_value, projection).sort(arg).limit(limit)
       if skip is not None and limit is not None:
           cursor_result = self.db_path[collection].find(find_value if projection is None else find_value, projection).sort(arg).skip(skip).limit(limit)
find_value if projection is None else find_value представляет собой всегдаfind_value; там опечатка?
chepner 05.10.2018 19:23

Я считаю маловероятным, что это источник каких-либо проблем с производительностью, которые могут у вас возникнуть. Читаемость? Ремонтопригодность? Вероятно, есть какие-то возможности для улучшения. Но с производительностью? Любые улучшения, которые вы могли бы внести в это, будут на микроуровне. При оптимизации для скорости общее правило состоит в том, что если вы не удвоите скорость, вы ничего не добьетесь. У вас, наверное, не получится здесь удвоить скорость.

mypetlion 05.10.2018 19:24

find_value, если проекция - None else find_value, projection -> retuns (find_value) или (find_value, projection) спасибо

susim 05.10.2018 19:39

Хорошо. Спасибо. Мне удобно пользоваться кодом. Но код, который я сделал, показался мне настолько плохим, что я спросил.

susim 05.10.2018 19:41
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
4
32
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ваш код настолько эффективен, насколько это возможно, поскольку cursor_result всегда задается ровно одной веткой, в которой выполняется вся реальная работа. Единственная проблема в том, что у него есть много дублированного кода. Вы можете выделить его, обрабатывая каждый вариант по отдельности.

def find_(self, collection, find_value=None, projection=None, sort=None, skip=None, limit=None, multi_array=None, cursor=False):
    # Get the right path and call find
    cursor_result = self.db_path[collection].find(find_value, projection)

    # Sort if necessary
    if sort is not None:
        cursor_result = cursor_result.sort(tuple(sort.items()))

    # Skip if necessary
    if skip is not None:
        cursor_result = cursor_result.skip(skip)

    # Limit if necessary
    if limit is not None:
        cursor_result = cursor_result.limit(limit)

Большое тебе спасибо!!. Это легко увидеть, и это работает. Сам я бы об этом не подумал. Было бы здорово, если бы рядом со мной был такой человек, как ты. Спасибо.

susim 05.10.2018 19:52

Другие вопросы по теме