170 похожих чатов

Здесь есть гуру чистого кода? Как можно оэтовот улучшить? Суть

такова: есть бот, в котором есть команда /leaderboard. Она должна выводить по 10 участников на страницу, а всего их - 100 (участников). Само по себе оно, как бы, работает, но сам код меня не очень удовлетворяет, а что конкретно, понять не могу 😅

21 ответов

20 просмотров

Ух.. 1. у тебя весь код свален в кучу и делает все сразу. - выборка данных - представление данных - отправка данных 2. list comprehension с простыней запроса внутри выглядит странно. 3. перебирать список и пропускать 9 подряд итераций чтобы получить 10ю выглядит тоже странно. что мешало взять range ?

MagMigo- Автор вопроса
Alex
Ух.. 1. у тебя весь код свален в кучу и делает вс...

1. Получается, стоит разбить по отдельным функциям? 2. Убрать list comprehensions и добавить его сразу туда, куда надо? (ну или вынести в отдельную переменную?) 3. ааа.. ээ.. ну попробую что-то с range, лан 4. а да?

MagMigo
1. Получается, стоит разбить по отдельным функциям...

1. Для начала, да 2. Если у тебя в компрехеншене более 2-3 вызовов, то это мгновенно говно. Используй обычные циклы 3. Зачем тебе вообще тут цикл с перебором элементов в level_data? Просто возьми len, подели нацело на десять и сформируй соответствующее количество выдачи 4. Да

Илья Власов
1. Для начала, да 2. Если у тебя в компрехеншене б...

Бтв к вопросу про то, зачем нужны все эти задачи на нахождение простых чисел, выведение остатков и прочее

MagMigo- Автор вопроса
Илья Власов
1. Для начала, да 2. Если у тебя в компрехеншене б...

Пока как надо изменяю или ошибку на ошибку исправил?

MagMigo
Пока как надо изменяю или ошибку на ошибку исправи...

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

Илья Власов
Убери компрехеншены. Вот просто не используй их, е...

А с компрехеншеном-то тут что? Вот то что контекст для форматирования строки собирается прямо по месту — портит читаемость, а в остальном не вижу катастрофы.

Замена компрехеншена циклом изменит что? Правильно, ничего.

evle
Замена компрехеншена циклом изменит что? Правильно...

Ну ты строку внутри компрехеншена не сформируешь нормально, давай начнем с этого. Отказ от компрехеншена это необходимое условие

И да, что мешает тут дебажить?

Why?

MagMigo- Автор вопроса

Предположим избавился я от компрехенша и сделал такое: iterable_data = [i async for i in self.get_leaderboard_data(guild_id=inter.guild_id, limit=100)] level_data = self.generate_leaderboard_data(interaction=inter, data=iterable_data) Насовсем не хочу избавляться, иначе iterable_data будет таким iterable_data = [] async for i in self.get_leaderboard_data(guild_id=inter.guild_id, limit=100): iterable_data.append(i) Тут уж лучше с ним, как по мне

MagMigo
Предположим избавился я от компрехенша и сделал та...

Вот лучше тут f-строку используй, у тебя уже сформированы параметры, подставлять их нормально через f-строки. Не надо в f-строках вызовы делать какие-то

evle
И да, что мешает тут дебажить?

Куча вызовов внутри строки, дебаггер ее за 1 инструкцию считает и между вызовами не понять что происходит нормально

evle
Why?

Покажи как сформировать и разложить по переменным

Илья Власов
Куча вызовов внутри строки, дебаггер ее за 1 инстр...

1. Внутри строки или внутри компрехеншена? Ты уж определись, к чему придираешься? 2. С чего ты решил, что дебагер будет считать это одной инструкцией? Точки останова и хождение по шагам прекрасно работают и внутри комрпхеншена и внутри форматной строки, если они разнесены на несколько строк.

evle
1. Внутри строки или внутри компрехеншена? Ты уж о...

Ты знаешь чем необходимо условие и достаточное различаются?

Ну объясняй. Пока я вижу ложное утверждение о том, что "дебаггер ее за 1 инструкцию считает и между вызовами не понять что происходит нормально".

evle
Ну объясняй. Пока я вижу ложное утверждение о том,...

С дебаггером вышел обсер, да. Тем не менее, это не является предметом основного обсуждения. Еще раз -- для нормального составления строки нужно вынести получение значений в отдельные переменные И этот вынос в компрехеншене нормально сделать нельзя => от компрехеншена нужно отказаться. Отсюда следует, что для нормального составления строки нужно отказаться от компрехеншена. Я максимально подробно расписал насколько смог

Илья Власов
С дебаггером вышел обсер, да. Тем не менее, это не...

Что значит "нельзя"? [ f"{value.param1} - {value.param2} - {value.param3}" for value in some_iter ] Так тебя тоже пугает? Весь вопрос к предложенному коду тут в том, что он пытается делать несколько вещей одновременно. Вынести эту генерацию в отдельную функцию, возвращающую итератор из датаклассов, словариков, namedtuple или чего-то такого — и всё прекрасно кладётся в компрехеншен. А со сложной логикой — что там, что там проблема.

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

Обсуждают сегодня

Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
> Копаем глубже > Следующий момент был, когда я спросил его, знает ли он JavaScript. Он ответил, что его учили работать с C#. Я тоже в университете писал на C#, но даже там мн...
Oleg Volkov
4
И никого не интересует какие пакеты кто использует. ((% Заходишь на сайт симфони и видишь поддержку Украины - по законам РФ это ж экстремизм. Только никто не отказывается от с...
Am Ambrion
11
лучше скажите, причём тут паскаль?
Alexey Kulakov
36
Чтобы перехватить все нажимания буков на форме, надо хук ставить? Пробовал на форме ОнКейДаун, оно ловит клаву если фокус не на компоненте с вводом текста
Serjone
15
Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
7
Народ! Впервые клиенту пришло письмо от РКН, у вас, дескать, есть яндекс метрика, а нигде не написано, что вы ее юзаете. Никто не сталкивался?
Sasha Beep
14
Всем привет! вывожу на общей стр дочерние ресурсыв каждом ресурсе галерея, и первая фотка должна выводиться на общей [!DocLister? &prepare=photo !]
Alekso
12
А можно вопрос? Мне сегодня сказали что у меня функция (которая просто заполняет массив значениями) не правильная void Full(double * arr, int n) { for (int i = 0; i < n; i...
† C E †
7
Добрый вечер. Хочу чтобы у меня в классе поле было функцией, которая возвращает строку. Делаю так: interface ... TGetOutPath = function : String of object; ... protec...
Kirill Filippenok
12
Карта сайта