Каталог каналов Новое Каналы в закладках Мои каналы Поиск постов Рекламные посты
Инструменты
Мониторинг Новое Детальная статистика Анализ аудитории Telegraph-статьи Бот аналитики
Полезная информация
Инструкция Telemetr Документация к API Чат Telemetr
Полезные сервисы
Защита от накрутки Создать своего бота Продать/Купить канал Монетизация

Не попадитесь на накрученные каналы! Узнайте, не накручивает ли канал просмотры или подписчиков Проверить канал на накрутку
Прикрепить Телеграм-аккаунт Прикрепить Телеграм-аккаунт

Телеграм канал «Постоянный репозиторий по Python»

Постоянный репозиторий по Python
189
0
1
0
383
Подписчики
Всего
1 856
Сегодня
+1
Просмотров на пост
Всего
355
ER
Общий
17.93%
Суточный
10.5%
Динамика публикаций
Telemetr - сервис глубокой аналитики
телеграм-каналов
Получите подробную информацию о каждом канале
Отберите самые эффективные каналы для
рекламных размещений, по приросту подписчиков,
ER, количеству просмотров на пост и другим метрикам
Анализируйте рекламные посты
и креативы
Узнайте какие посты лучше сработали,
а какие хуже, даже если их давно удалили
Оценивайте эффективность тематики и контента
Узнайте, какую тематику лучше не рекламировать
на канале, а какая зайдет на ура
Попробовать бесплатно
Показано 7 из 189 постов
Смотреть все посты
Пост от 27.11.2025 13:04
133
0
0
Пост от 27.11.2025 13:04
133
0
0
Пост от 26.11.2025 10:20
244
0
6
Как правильно логировать в Python без боли Большинство разработчиков начинают с print(), но уже через пару недель проект превращается в лотерею: что где выводится, почему нет таймстампов, где искать ошибки? Python даёт готовый, простой и мощный инструмент – logging, и в 80% задач достаточно всего трёх строк. Минимальная настройка, которая работает везде import logging logging.basicConfig( level=logging.INFO, format="%(asctime)s | %(levelname)s | %(name)s | %(message)s" ) log = logging.getLogger(__name__) Что дают эти три строки? level=logging.INFO Выводим всё, что реально важно: INFO, WARNING, ERROR. Если нужно больше деталей – смените на DEBUG. format=... Очень удобный формат: - время – для поиска проблем - уровень – для фильтрации - имя модуля – понимаем, откуда пришло сообщение - текст – собственно лог Такой формат хорошо читается в терминале, логах контейнеров, лог-агрегаторах. getLogger(__name__) Каждый файл получает свой логгер. В больших проектах это буквально спасает ориентацию в логах. Как использовать log.info("Сервис запущен") log.debug("Количество подключений: %s", count) log.warning("Медленный запрос: %s", request_time) log.error("Ошибка подключения к БД") Фишка: не используйте f-строки. logging подставляет параметры лениво, не тратя время, если лог не будет выведен. Почему это закрывает 80% задач? - Работает из коробки без внешних зависимостей. - Подходит для CLI-скриптов, API, микросервисов, ML-пайплайнов. - Хорошо дружит с Docker – логи идут в stdout. - Может быть расширено позже: - вывод в файл - ротация логов (RotatingFileHandler) - JSON-логи (logging.Formatter) - интеграция с Sentry / ELK / Grafana Loki - цветной вывод в терминале Но начало всегда одно – простая, чистая конфигурация, которую можно скопировать и забыть.
👍 4
🔥 2
🤝 2
1
Пост от 20.11.2025 12:04
432
0
0
👍 2
1
🔥 1
🥰 1
👏 1
Пост от 20.11.2025 12:04
395
0
0
Пост от 18.11.2025 12:46
350
0
1
Генетические алгоритмы представляют собой эволюционный метод оптимизации, вдохновлённый принципами естественного отбора. В этом подходе возможные решения задачи рассматриваются как особи в популяции, каждая из которых обладает определёнными характеристиками. Качество решения определяется функцией приспособленности, и чем выше это значение, тем больше вероятность, что данная особь будет выбрана для генерации следующего поколения. В процессе эволюции происходит отбор лучших индивидов, их скрещивание для получения новых комбинаций признаков и случайные мутации, обеспечивающие разнообразие. Со временем популяция всё лучше адаптируется к задаче, постепенно улучшая качество решений. Чтобы продемонстрировать минимальную структуру генетического алгоритма в DEAP, обычно используют классическую тестовую задачу OneMax. Её суть заключается в поиске бинарной строки максимальной приспособленности, где приспособленность определяется простой суммой единиц. Индивид представляет собой список из нулей и единичных значений фиксированной длины, а целью алгоритма является получение строки, состоящей из одних единиц. Благодаря простоте этой задачи можно сосредоточиться на механике работы генетического алгоритма: создании популяции, определении функции фитнеса, выборе операторов селекции, скрещивания и мутации. Это делает OneMax удобным примером для минимального рабочего кода. import random from deap import base, creator, tools, algorithms # Определяем типы creator.create("FitnessMax", base.Fitness, weights=(1.0,)) creator.create("Individual", list, fitness=creator.FitnessMax) toolbox = base.Toolbox() # Ген битов toolbox.register("attr_bool", random.randint, 0, 1) # Индивид и популяция toolbox.register("individual", tools.initRepeat, creator.Individual, toolbox.attr_bool, 20) toolbox.register("population", tools.initRepeat, list, toolbox.individual) # Фитнес-функция def eval_one_max(individual): return (sum(individual),) toolbox.register("evaluate", eval_one_max) # Операторы ГА toolbox.register("mate", tools.cxTwoPoint) toolbox.register("mutate", tools.mutFlipBit, indpb=0.05) toolbox.register("select", tools.selTournament, tournsize=3) def main(): random.seed(42) pop = toolbox.population(n=50) # Начальная оценка fitnesses = list(map(toolbox.evaluate, pop)) for ind, fit in zip(pop, fitnesses): ind.fitness.values = fit for gen in range(20): offspring = toolbox.select(pop, len(pop)) offspring = list(map(toolbox.clone, offspring)) # Cкрещивание for c1, c2 in zip(offspring[::2], offspring[1::2]): if random.random() < 0.5: toolbox.mate(c1, c2) del c1.fitness.values del c2.fitness.values # Мутации for mutant in offspring: if random.random() < 0.2: toolbox.mutate(mutant) del mutant.fitness.values # Переоценка изменённых индивидов invalid = [ind for ind in offspring if not ind.fitness.valid] fits = map(toolbox.evaluate, invalid) for ind, fit in zip(invalid, fits): ind.fitness.values = fit pop[:] = offspring best = tools.selBest(pop, 1)[0] print(f"Поколение {gen}: фитнес = {best.fitness.values[0]}") print("\nЛучший найденный индивид:", best) print("Сумма единиц:", sum(best)) if __name__ == "__main__": main() В итоге задача OneMax служит простым, но показательно эффективным примером применения генетических алгоритмов в DEAP. Она позволяет без лишних деталей понять структуру эволюционного поиска и увидеть, как популяция шаг за шагом улучшает решения за счёт отбора, скрещивания и мутаций. Отработав данный минимальный пример, становится проще переходить к более сложным задачам оптимизации, где фитнес-функция учитывает реальные параметры и имеет куда более сложную структуру.
3
👍 2
🔥 1
🥰 1
Пост от 14.11.2025 10:26
438
0
0
Глобальные и локальные переменные в Python: что нужно знать Работа с областями видимости – одна из тех тем, на которой часто спотыкаются начинающие. Вроде всё просто: переменная есть переменная. Но в Python важно где она объявлена и кто к ней обращается. Разберём ключевые моменты на небольших примерах. 1. Локальные переменные существуют только внутри функции x = 10 # глобальная переменная def foo(): x = 5 # локальная переменная print("Внутри функции:", x) foo() print("Снаружи функции:", x) Локальная переменная x внутри функции полностью скрывает глобальную. Значение x снаружи функции не изменится. 2. Глобальные переменные можно читать, но не изменять x = 10 def bar(): print("Чтение глобальной переменной:", x) # OK bar() Если в функции не создаётся переменная с тем же именем, Python возьмёт значение из глобальной области. Читать глобальные переменные можно свободно – проблемы возникают, когда вы хотите изменить их. 3. Чтобы изменить глобальную переменную – нужен global x = 10 def baz(): global x x = 99 # изменение глобальной переменной baz() print("После изменения:", x) Без ключевого слова global Python создаст локальную переменную x и выдаст ошибку при попытке записи. Используйте global только тогда, когда это действительно необходимо. Часто лучше передавать значения в функцию через аргументы и возвращать результат. Итог - Всё, что объявлено внутри функции, – локально. - Всё, что объявлено вне функции, – глобально. - Глобальные переменные можно читать, но изменять – только через global. - Чем меньше глобальных переменных – тем лучше структура программы.
👍 4
🔥 2
1
🥰 1
Смотреть все посты