Когда Django-запросы вытягивают из базы больше данных, чем нужно, это тормозит работу приложения. Чтобы ускорить выполнение и уменьшить нагрузку, можно использовать методы:
defer()
— откладывает загрузку указанных полей до их фактического использования only()
— загружает только указанные поля, остальные — по запросу exclude()
— фильтрует объекты, исключая ненужныеВ статье — практические примеры на базе веб-приложения для агентства недвижимости: как применять эти методы, чтобы получать только нужные данные и ускорять запросы.
🔗 Подробнее в статье
Proglib Academy #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1🙏1
Что выведет код?
👍 — Moscow
👾 — 12
🌚 — Saint Petersburg
😄 — 5
⚡️ — Nizhny Novgorod
Proglib Academy #междусобойчик
👍 — Moscow
😄 — 5
Proglib Academy #междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
🌚12👍2❤1⚡1😁1
🔥 RFID в непростых условиях: как НЛМК отслеживает ковши с расплавленным чугуном
В металлургии счет идет на секунды: чугун остывает, оборудование простаивает, деньги улетают. Раньше НЛМК отслеживал ковши «по старинке» — звонками и рациями.
Теперь каждый ковш «умный»: система знает, где он находится, какая у него температура и куда движется. Спойлер:экономия огромная .
🦾 Иван Клестов-Надеев, главный специалист по цифровизации коксохимического, доменного и энергетического производства НЛМК, делится опытом реализации этой системы совместно со специалистами НЛМК ИТ
Proglib Academy #буст
В металлургии счет идет на секунды: чугун остывает, оборудование простаивает, деньги улетают. Раньше НЛМК отслеживал ковши «по старинке» — звонками и рациями.
Теперь каждый ковш «умный»: система знает, где он находится, какая у него температура и куда движется. Спойлер:
Proglib Academy #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1🔥1🙏1
Учить сложные темы бывает непросто, но что, если можно разбить их на простые и понятные части? Делимся мощным промптом для ChatGPT, который поможет разобраться в любом сложном аспекте Python — от асинхронности до метапрограммирования.
I need help breaking down [конкретная тема] into smaller, simpler parts that are easier to understand.
Identify the most important 20% of learnings that will help me understand 80% of the subject.
Use analogies and real-life examples to explain each concept in a relatable way.
The explanation should focus on making the topic clear and engaging while connecting it to everyday experiences or situations.
Additionally, suggest tips or questions I can use to check my understanding of the material.
— Разбивает сложную тему на ключевые 20% знаний, которые дадут 80% понимания
— Приводит аналоги и примеры из жизни (например, асинхронность как готовка в ресторане)
— Помогает проверить себя, предлагая вопросы для самопроверки
— Разобраться в
asyncio
через повседневные сценарии — Понять работу
metaclass
с аналогиями из конструкторов LEGO — Прояснить
decorators
, представив их как модульные дополнения в кафеProglib Academy #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1🙏1
☝️ Последний шанс купить курсы Proglib Academy с доступом навсегда!
Это не просто летняя распродажа, это финал эпохи. Мы дарим скидку 40% на все курсы, включая полностью обновлённый курс по Python (предложение НЕ ДЕЙСТВУЕТ только на курс по AI-агентам для DS-специалистов).
Но главное: с 1 августа доступ ко всем новым курсам станет ограниченным. Успейте инвестировать в свои знания на самых выгодных условиях!
👉 Выбрать курс
Это не просто летняя распродажа, это финал эпохи. Мы дарим скидку 40% на все курсы, включая полностью обновлённый курс по Python (предложение НЕ ДЕЙСТВУЕТ только на курс по AI-агентам для DS-специалистов).
Но главное: с 1 августа доступ ко всем новым курсам станет ограниченным. Успейте инвестировать в свои знания на самых выгодных условиях!
👉 Выбрать курс
Сбер на GigaConf показал GigaStudio — штуку, которая сама делает веб-приложения из текстового описания. Просто пишешь в чат: «хочу сайт с формой регистрации» — и получаешь готовый проект. Да, прям так.
Работает на GitVerse — это не игрушка, а серьёзная платформа для разработчиков: CI/CD, приватные репы, Jupyter, API, всё на месте.
— быстро делать MVP и прототипы
— вкатиться в ИТ без кучи хардскиллов
— или просто не тратить вечность на шаблонную верстку
А ещё добавили сборки в облаке, поддержку Data Science и API для автоматизации.
Proglib Academy #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1🥱1
TARIFF — это шуточный репозиторий в духе политической сатиры, который позволяет вводить пошлины на Python-библиотеки. Несмотря на ироничную подачу, проект набирает популярность в Python-сообществе.
Установка:
pip install tariff
Использование:
import tariff
# Устанавливаем пошлины (название_пакета: процент)
tariff.set({
"numpy": 50, # 50% пошлина на numpy
"pandas": 200, # 200% на pandas
"requests": 150 # 150% на requests
})
# Теперь при импорте эти пакеты будут замедлены!
import numpy # +50% к времени импорта
import pandas # +200%
1. Это оригинальный проект для портфолио — работодатели обожают необычные штуки, которые показывают креатив и кодинг-скилл.
2. GitHub, repo, setup.py, pip — всё как у взрослых.
3. TARIFF уже обсуждают в Python-сообществе. А ты можешь форкнуть, доработать и показать на собесе.
Proglib Academy #оффер_мечты
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1👍1😁1
👉 Разбор:
Функция max() по умолчанию применяется к ключам словаря — т.е. к строкам 'Moscow', 'Saint Petersburg', 'Nizhny Novgorod'.
Сравнение идёт по лексикографическому порядку (по алфавиту, как строки). Так что max(population) вернёт 'Saint Petersburg', потому что:
'Moscow' < 'Nizhny Novgorod' < 'Saint Petersburg'
Proglib Academy #междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
😍1🌚1
📚Напоминаем про наш полный курс «Самоучитель по Python для начинающих»
Мы написали и собрали для вас в одну подборку все 25 глав и 230 практических заданий!
🐍 Часть 1: Особенности, сферы применения, установка, онлайн IDE
🐍 Часть 2: Все, что нужно для изучения Python с нуля – книги, сайты, каналы и курсы
🐍 Часть 3: Типы данных: преобразование и базовые операции
🐍 Часть 4: Методы работы со строками
🐍 Часть 5: Методы работы со списками и списковыми включениями
🐍 Часть 6: Методы работы со словарями и генераторами словарей
🐍 Часть 7: Методы работы с кортежами
🐍 Часть 8: Методы работы со множествами
🐍 Часть 9: Особенности цикла for
🐍 Часть 10: Условный цикл while
🐍 Часть 11: Функции с позиционными и именованными аргументами
🐍 Часть 12: Анонимные функции
🐍 Часть 13: Рекурсивные функции
🐍 Часть 14: Функции высшего порядка, замыкания и декораторы
🐍 Часть 15: Методы работы с файлами и файловой системой
🐍 Часть 16: Регулярные выражения
🐍 Часть 17: Основы скрапинга и парсинга
🐍 Часть 18: Основы ООП – инкапсуляция и наследование
🐍 Часть 19: Основы ООП – абстракция и полиморфизм
🐍 Часть 20: Графический интерфейс на Tkinter
🐍 Часть 21: Основы разработки игр на Pygame
🐍 Часть 22: Основы работы с SQLite
🐍 Часть 23: Основы веб-разработки на Flask
🐍 Часть 24: Основы работы с NumPy
🐍 Часть 25: Основы анализа данных с Pandas
Мы написали и собрали для вас в одну подборку все 25 глав и 230 практических заданий!
🐍 Часть 1: Особенности, сферы применения, установка, онлайн IDE
🐍 Часть 2: Все, что нужно для изучения Python с нуля – книги, сайты, каналы и курсы
🐍 Часть 3: Типы данных: преобразование и базовые операции
🐍 Часть 4: Методы работы со строками
🐍 Часть 5: Методы работы со списками и списковыми включениями
🐍 Часть 6: Методы работы со словарями и генераторами словарей
🐍 Часть 7: Методы работы с кортежами
🐍 Часть 8: Методы работы со множествами
🐍 Часть 9: Особенности цикла for
🐍 Часть 10: Условный цикл while
🐍 Часть 11: Функции с позиционными и именованными аргументами
🐍 Часть 12: Анонимные функции
🐍 Часть 13: Рекурсивные функции
🐍 Часть 14: Функции высшего порядка, замыкания и декораторы
🐍 Часть 15: Методы работы с файлами и файловой системой
🐍 Часть 16: Регулярные выражения
🐍 Часть 17: Основы скрапинга и парсинга
🐍 Часть 18: Основы ООП – инкапсуляция и наследование
🐍 Часть 19: Основы ООП – абстракция и полиморфизм
🐍 Часть 20: Графический интерфейс на Tkinter
🐍 Часть 21: Основы разработки игр на Pygame
🐍 Часть 22: Основы работы с SQLite
🐍 Часть 23: Основы веб-разработки на Flask
🐍 Часть 24: Основы работы с NumPy
🐍 Часть 25: Основы анализа данных с Pandas
👍2⚡1
🧠 От конкурентного программирования к производству
Есть проекты, где смена всего одного неудачного алгоритма в корне меняет картину. Внезапно запросы начинают выполняться за миллисекунды, а пользователи перестают жаловаться на «тормоза». Обычно такие решения находят программисты, которые участвовали в соревнованиях по спортивному программированию.
➡️ Сегодня рассказываем, почему их мышление помогает в реальной работе.
Proglib Academy #буст
Есть проекты, где смена всего одного неудачного алгоритма в корне меняет картину. Внезапно запросы начинают выполняться за миллисекунды, а пользователи перестают жаловаться на «тормоза». Обычно такие решения находят программисты, которые участвовали в соревнованиях по спортивному программированию.
Proglib Academy #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🌚1
В Python
break
в циклах for
прерывает итерацию, но часто есть более читаемые и лаконичные способы. Разберём типичные случаи и их альтернативы.Классика с
break
:color_options = ["blue", "green", "purple"]
is_purple_an_option = False
for color in color_options:
if color == "purple":
is_purple_an_option = True
break
Альтернатива — оператор
in
:is_purple_an_option = "purple" in color_options
in
работает со всеми итерируемыми объектами, а для set
и dict
ещё и быстрее, чем цикл.Пример с
break
:points_per_user = [3, 12, 28, 105]
anyone_has_100 = False
for points in points_per_user:
if points > 100:
anyone_has_100 = True
break
Альтернатива —
any
:anyone_has_100 = any(points > 100 for points in points_per_user)
any
(или all
для "все элементы") делает код выразительнее.С
break
:words = ["Look", "at", "these", "excellent", "words"]
first_long_word = None
for word in words:
if len(word) > 4:
first_long_word = word
break
Альтернатива —
next
с генератором:long_words = (word for word in words if len(word) > 4)
first_long_word = next(long_words, None)
next
берёт первый элемент из генератора, а None
— значение по умолчанию, если ничего не найдено.С
break
:items = ["chair", "desk", "", "lamp"]
before_blank = []
for item in items:
if not item:
break
before_blank.append(item)
Альтернатива —
itertools.takewhile
:from itertools import takewhile
before_blank = list(takewhile(bool, items))
takewhile
собирает элементы, пока условие истинно, и возвращает итератор.break
полезен, но часто его можно заменить:—
in
— для проверки наличия—
any/all
— для условий—
next
— для поиска первого значения—
takewhile
— для сбора до условияbreak
?Proglib Academy #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3❤1
🔥 Как НЛМК отслеживает ковши с расплавленным чугуном — и зачем это нужно
Раньше ковши искали по рации. Сегодня — за ними следит цифровая система: знает, где каждый ковш, сколько в нём чугуна, куда он движется и не перегрелась ли футеровка.
В новом кейсе рассказываем:
— почему стандартные RFID-метки плавились и что сделали вместо
— как устроена цифровая модель предприятия
— что даёт это внедрение: меньше простоев, теплопотерь и аварий
👷♂️ Спойлер:теперь даже ковши «думают».
📌 Читать: https://proglib.io/sh/mXKzViUZen
Proglib Academy #буст
Раньше ковши искали по рации. Сегодня — за ними следит цифровая система: знает, где каждый ковш, сколько в нём чугуна, куда он движется и не перегрелась ли футеровка.
В новом кейсе рассказываем:
— почему стандартные RFID-метки плавились и что сделали вместо
— как устроена цифровая модель предприятия
— что даёт это внедрение: меньше простоев, теплопотерь и аварий
👷♂️ Спойлер:
📌 Читать: https://proglib.io/sh/mXKzViUZen
Proglib Academy #буст
❤1👍1
This media is not supported in your browser
VIEW IN TELEGRAM
🔹 How to: как работают генераторы в Python
Генераторы — мощный инструмент для итераций, особенно при работе с большими данными. В отличие от обычных функций, они вычисляют значения лениво, выдавая их по запросу и экономя память. Это делает код более эффективным и удобным для повторного использования.
➡️ Принцип работы
Вместо возврата всех значений сразу, генератор использует
При вызове
➡️ Пример: Фибоначчи на генераторах
Такой генератор можно использовать для обработки больших последовательностей без лишних затрат памяти.
➡️ Генераторы vs. списки
Генераторы экономят память, так как не хранят все элементы в памяти:
Разница очевидна: генератор занимает всего 208 байт, тогда как список — 8+ мегабайт!
➡️ Генераторные выражения
Аналогично списковым включениям, но работают лениво:
➡️ Комбинирование генераторов
С помощью itertools генераторы можно объединять и фильтровать:
➡️ Когда использовать генераторы
— Обработка больших данных без перегрузки памяти
— Потоковая обработка (например, чтение файлов)
— Создание бесконечных последовательностей
— Оптимизация скорости и эффективности кода
Proglib Academy #буст
Генераторы — мощный инструмент для итераций, особенно при работе с большими данными. В отличие от обычных функций, они вычисляют значения лениво, выдавая их по запросу и экономя память. Это делает код более эффективным и удобным для повторного использования.
Вместо возврата всех значений сразу, генератор использует
yield
, который приостанавливает выполнение функции, сохраняя её состояние:def simple_generator():
print("Первый yield")
yield 1
print("Второй yield")
yield 2
gen = simple_generator()
print(next(gen)) # Первый yield → 1
print(next(gen)) # Второй yield → 2
При вызове
next()
выполнение продолжается с места, где остановилось. Это позволяет работать с последовательностями, не загружая их полностью в память.def fibonacci_generator(limit):
a, b = 0, 1
while a < limit:
yield a
a, b = b, a + b
Такой генератор можно использовать для обработки больших последовательностей без лишних затрат памяти.
Генераторы экономят память, так как не хранят все элементы в памяти:
import sys
def list_numbers(n):
return [i for i in range(n)]
def generator_numbers(n):
return (i for i in range(n))
print(sys.getsizeof(list_numbers(1000000))) # 8448728 байт
print(sys.getsizeof(generator_numbers(1000000))) # 208 байт
Разница очевидна: генератор занимает всего 208 байт, тогда как список — 8+ мегабайт!
Аналогично списковым включениям, но работают лениво:
squares_list = [x * x for x in range(10)] # Обычный список
squares_gen = (x * x for x in range(10)) # Генератор
С помощью itertools генераторы можно объединять и фильтровать:
from itertools import chain, filterfalse
result = chain((x * x for x in range(10)), (y + 10 for y in range(5)))
odd_squares = filterfalse(lambda x: x % 2 == 0, (x * x for x in range(10)))
— Обработка больших данных без перегрузки памяти
— Потоковая обработка (например, чтение файлов)
— Создание бесконечных последовательностей
— Оптимизация скорости и эффективности кода
Proglib Academy #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3❤1
🤖 Знаете, чем настоящий AI отличается от чат-бота?
Чат-бот просит перезагрузить роутер, а настоящий AI уже умеет читать ваши эмоции в чате, включать музыку под ваше настроение, контролировать погрузку руды с точностью Терминатора и даже находить на КТ-снимках то, чего не заметит человеческий глаз.
Современные компании для таких задач всё чаще используют Deep Learning — алгоритмы на основе нейросетей. Но чтобы попасть в эту лигу, нужен фундамент. И имя ему — Machine Learning.
Наш новый курс по ML — это не волшебная таблетка. Это честный и структурированный путь в мир Data Science. Мы дадим вам базу, с которой вы:
✅ разберётесь, как мыслят машины (спойлер:матрицами! );
✅ научитесь строить работающие модели, а не карточные домики;
✅ получите трамплин для прыжка в Deep Learning.
Хватит смотреть, как другие запускают ракеты. Пора строить свой собственный космодром.
Начните с фундамента на нашем курсе по Machine Learning!
Чат-бот просит перезагрузить роутер, а настоящий AI уже умеет читать ваши эмоции в чате, включать музыку под ваше настроение, контролировать погрузку руды с точностью Терминатора и даже находить на КТ-снимках то, чего не заметит человеческий глаз.
Современные компании для таких задач всё чаще используют Deep Learning — алгоритмы на основе нейросетей. Но чтобы попасть в эту лигу, нужен фундамент. И имя ему — Machine Learning.
Наш новый курс по ML — это не волшебная таблетка. Это честный и структурированный путь в мир Data Science. Мы дадим вам базу, с которой вы:
✅ разберётесь, как мыслят машины (спойлер:
✅ научитесь строить работающие модели, а не карточные домики;
✅ получите трамплин для прыжка в Deep Learning.
Хватит смотреть, как другие запускают ракеты. Пора строить свой собственный космодром.
Начните с фундамента на нашем курсе по Machine Learning!