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

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

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

21 ответов

23 просмотра

Ух.. 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 или чего-то такого — и всё прекрасно кладётся в компрехеншен. А со сложной логикой — что там, что там проблема.

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта