🐍 Минимум и максимум в Python
Чтобы быстро получить минимальное и максимальное значение из последовательности, используй встроенные функции
Обе поддерживают параметр
Подписывайся, больше фишек каждый день !
Чтобы быстро получить минимальное и максимальное значение из последовательности, используй встроенные функции
min() и max(). Обе поддерживают параметр
default — он задаёт значение по умолчанию, если последовательность пуста. Подписывайся, больше фишек каждый день !
numbers = [3, 7, 2, 9]
print(min(numbers)) # 2
print(max(numbers)) # 9
# пример с пустым списком
print(min([], default=0)) # 0
print(max([], default=0)) # 0
❤9🔥2
25 ноября (уже сегодня!) в 19:00 по мск приходи на прямой эфир с реальным собеседованием на Middle разработчика.
Почему точно нужно прийти:
Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Python-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы.
Реклама.
О рекламодателе
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4
This media is not supported in your browser
VIEW IN TELEGRAM
Когда Python-код в Docker начинает внезапно тормозить, а контейнеры — весить гигабайты, часто виновник скрыт глубже: Docker копирует в образ всё виртуальное окружение, кэш pip, артефакты билдов и даже .pyc-файлы.
Есть хитрый способ избежать этого и сделать контейнер в 5–10 раз легче и гораздо быстрее:
Используйте многоступенчатую сборку, где Python-зависимости собираются в одном этапе, а в финальный образ попадает только «чистый» результат.
Так вы исключаете мусор, ускоряете сборку и снижаете attack surface.
Многоступенчатый Dockerfile для Python
1. Этап сборки зависимостей
FROM python:3.12-slim AS builder
WORKDIR /build
COPY requirements.txt .
RUN pip install --no-cache-dir --prefix=/install -r requirements.txt
2. Финальный минимальный образ
FROM python:3.12-slim
WORKDIR /app
Копируем только готовые зависимости без pip-кэша
COPY --from=builder /install /usr/local
Добавляем чистый код без артефактов
COPY . .
CMD ["python", "main.py"]
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9🔥9🥰3
На собеседованиях всегда выигрывает тот, кто понимает, чего ждут на каждом этапе — а не тот, кто просто отвечает на вопросы.
Разница между ними огромная: первый видит процесс целиком, понимает логику найма, цель каждого раунда и то, какие сигналы считывает интервьюер. Он знает, когда важно показать глубину, а когда — скорость или коммуникацию. Второй же приходит «как есть» и надеется, что ответы «понравятся». И чаще всего это не работает, даже если у кандидата хороший опыт.
На вебинаре karpovꓸcourses «Кого возьмут в аналитики в 2026 году: честный взгляд руководителя продуктовой аналитики из Garage Eight» разберут: как устроена логика этапов, что хотят проверить менеджеры и какие маркеры показывают, что кандидат реально понимает продукт, данные и мышление аналитика. Вы сможете посмотреть на процесс «с другой стороны» и подготовиться осознанно.
Узнать как проходит весь процесс найма на бесплатном вебинаре — https://clc.to/erid_2W5zFGd8X1J
Реклама. ООО "КАРПОВ КУРСЫ". ИНН 7811764627. erid: 2W5zFGd8X1J
Разница между ними огромная: первый видит процесс целиком, понимает логику найма, цель каждого раунда и то, какие сигналы считывает интервьюер. Он знает, когда важно показать глубину, а когда — скорость или коммуникацию. Второй же приходит «как есть» и надеется, что ответы «понравятся». И чаще всего это не работает, даже если у кандидата хороший опыт.
На вебинаре karpovꓸcourses «Кого возьмут в аналитики в 2026 году: честный взгляд руководителя продуктовой аналитики из Garage Eight» разберут: как устроена логика этапов, что хотят проверить менеджеры и какие маркеры показывают, что кандидат реально понимает продукт, данные и мышление аналитика. Вы сможете посмотреть на процесс «с другой стороны» и подготовиться осознанно.
Узнать как проходит весь процесс найма на бесплатном вебинаре — https://clc.to/erid_2W5zFGd8X1J
Реклама. ООО "КАРПОВ КУРСЫ". ИНН 7811764627. erid: 2W5zFGd8X1J
❤5🔥2🌚1
Разработка крупного Python-проекта требует продуманной архитектуры. Правильная структура кода упрощает развитие, тестирование и поддержку приложения.
В этой статье мы рассмотрим ключевые принципы архитектурной организации для разных типов проектов - веб-приложений, библиотек, микросервисов и систем обработки данных.
Обсудим разделение системы на слои (domain, service, infrastructure), использование популярных шаблонов проектирования (Dependency Injection, Repository, Facade), организацию кода по модулям и пакетам, примеры структуры каталогов, работу с зависимостями и конфигурацией (Pydantic, dotenv), логгирование и мониторинг, обеспечение тестируемости, поддержку расширяемости и модульности.
Также приведем примеры кода и структуры каталогов, а в конце – общие советы и распространенные ошибки, которых следует избегать.
https://uproger.com/kak-organizovat-arhitekturu-bolshogo-python-proekta/
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤3🥰2
🎨 NFT Generator: Создавайте уникальные NFT с легкостью!
Этот репозиторий предлагает простой способ генерации изображений NFT с использованием Python. Просто структурируйте свои изображения в папках и запустите скрипт для создания множества уникальных комбинаций. Поддерживает анимацию и графический интерфейс.
🚀Основные моменты:
- Легкая генерация NFT из изображений.
- Поддержка уникальных комбинаций и анимации.
- Интуитивно понятный GUI для удобства использования.
- Настраиваемая структура папок для ваших изображений.
📌 GitHub: https://github.com/vooltex5083/NFT-generator
#python
Этот репозиторий предлагает простой способ генерации изображений NFT с использованием Python. Просто структурируйте свои изображения в папках и запустите скрипт для создания множества уникальных комбинаций. Поддерживает анимацию и графический интерфейс.
🚀Основные моменты:
- Легкая генерация NFT из изображений.
- Поддержка уникальных комбинаций и анимации.
- Интуитивно понятный GUI для удобства использования.
- Настраиваемая структура папок для ваших изображений.
📌 GitHub: https://github.com/vooltex5083/NFT-generator
#python
GitHub
GitHub - vooltex5083/NFT-generator: 🔥 nft generator 🔥 nft generator written in python3 nft generator designed to perform its designated…
🔥 nft generator 🔥 nft generator written in python3 nft generator designed to perform its designated function. nft generator tool nft generator utility nft generator crypto bot nft generator bot uti...
❤4👍3🔥2🥰1
This media is not supported in your browser
VIEW IN TELEGRAM
🔥 Коварная ловушка с замыканиями в Python
Многие хитрые баги в Python появляются из-за того, что разработчики неверно понимают область видимости переменных в замыканиях.
Частая ошибка - внутри цикла создавать функции-лямбды, которые «помнят» одно и то же финальное значение переменной, а не значение на каждой итерации. В итоге весь список функций ведёт себя одинаково. Чтобы избежать ловушки, фиксируйте значение через аргумент по умолчанию или используйте functools.partial.
Многие хитрые баги в Python появляются из-за того, что разработчики неверно понимают область видимости переменных в замыканиях.
Частая ошибка - внутри цикла создавать функции-лямбды, которые «помнят» одно и то же финальное значение переменной, а не значение на каждой итерации. В итоге весь список функций ведёт себя одинаково. Чтобы избежать ловушки, фиксируйте значение через аргумент по умолчанию или используйте functools.partial.
funcs = []
for i in range(5):
# Ошибка - все функции запомнят i=4
funcs.append(lambda: i)
print([f() for f in funcs]) # [4,4,4,4,4]
funcs_safe = []
for i in range(5):
# Правильно - захватываем текущее значение
funcs_safe.append(lambda i=i: i)
print([f() for f in funcs_safe]) # [0,1,2,3,4]
❤7👍4
This media is not supported in your browser
VIEW IN TELEGRAM
🕔 Как сделать задержку в Python разными способами
В Python есть несколько способов сделать задержку, и каждый подходит под разные задачи.
Обычная пауза - через time.sleep().
Неблокирующая задержка - через asyncio.sleep() в асинхронном коде.
Точная задержка в цикле — через time.perf_counter().
Выбирайте под свой сценарий.
import time
В Python есть несколько способов сделать задержку, и каждый подходит под разные задачи.
Обычная пауза - через time.sleep().
Неблокирующая задержка - через asyncio.sleep() в асинхронном коде.
Точная задержка в цикле — через time.perf_counter().
Выбирайте под свой сценарий.
import time
print("Старт")
time.sleep(2) # простая задержка
print("Пауза 2 секунды завершена")
#2 вариант
import asyncio
async def main():
print("Асинхронный старт")
await asyncio.sleep(1.5) # не блокирует поток
print("Прошла асинхронная задержка 1.5 сек")
asyncio.run(main())
#3 вариант
import time
start = time.perf_counter()
while time.perf_counter() - start < 1: # точная контрольная задержка ~1 сек
pass
print("Прошла точная задержка без sleep")
❤8
This media is not supported in your browser
VIEW IN TELEGRAM
🚨 SQL Никогда НЕ ДЕЛАЙ ТАК #sql
НИКОГДА НЕ ЛОМАЙ ИНДЕКСЫ ФУНКЦИЯМИ: не оборачивай индексируемые поля в функции внутри WHERE.
Как только ты пишешь LOWER(), CAST(), COALESCE() или любые вычисления по колонке — индекс перестаёт работать, и запрос падает в полное сканирование таблицы.
Это одна из самых тихих причин, почему запросы внезапно превращаются в тормоза.
Вместо этого приводи значения заранее или используй функциональные индексы.
https://www.youtube.com/shorts/AyiAslOeJFA
НИКОГДА НЕ ЛОМАЙ ИНДЕКСЫ ФУНКЦИЯМИ: не оборачивай индексируемые поля в функции внутри WHERE.
Как только ты пишешь LOWER(), CAST(), COALESCE() или любые вычисления по колонке — индекс перестаёт работать, и запрос падает в полное сканирование таблицы.
Это одна из самых тихих причин, почему запросы внезапно превращаются в тормоза.
Вместо этого приводи значения заранее или используй функциональные индексы.
Плохо: индекс по email НЕ используется
SELECT *
FROM users
WHERE LOWER(email) = 'user@example.com';
-- Хорошо: нормализуем значение заранее
SELECT *
FROM users
WHERE email = 'user@example.com';
-- Или создаём функциональный индекс (PostgreSQL)
CREATE INDEX idx_users_email_lower ON users (LOWER(email));
https://www.youtube.com/shorts/AyiAslOeJFA
❤7👍3🔥1
⚡️Представь: ты дошёл до оффера в Big Tech, осталось «просто поболтать про прошлый опыт» — и именно тут тебя разворачивают. Разница между middle и senior — это не только LeetCode и system design, а то, как ты говоришь о своих проектах.
🔥9 декабря в 19.00 мск. приглашаем на открытый вебинар «Самое важное интервью при устройстве в Big Tech».
Спикер: Даня Слободенюк, Team Lead разработки в ex-Yandex, ex-T-Bank, ex-Sber, founder algocode
Вопросы:
• устройство секции про прошлый опыт
• как структурировать рассказ о сложном проекте
• как разбирать факапы и показывать лидерство
• типовые вопросы про масштабирование и «пожары»
• как эта секция решает твой грейд и ЗП
🎁Бонус: доступ к algocode на 3 дня за 1 рубль, чек-лист по прохождению секции
👉Регистрация
algocode помогает готовиться к собеседованиям в Big Tech — от алгоритмов и system design до таких «простых» секций про прошлый опыт.
#реклама
О рекламодателе
🔥9 декабря в 19.00 мск. приглашаем на открытый вебинар «Самое важное интервью при устройстве в Big Tech».
Спикер: Даня Слободенюк, Team Lead разработки в ex-Yandex, ex-T-Bank, ex-Sber, founder algocode
Вопросы:
• устройство секции про прошлый опыт
• как структурировать рассказ о сложном проекте
• как разбирать факапы и показывать лидерство
• типовые вопросы про масштабирование и «пожары»
• как эта секция решает твой грейд и ЗП
🎁Бонус: доступ к algocode на 3 дня за 1 рубль, чек-лист по прохождению секции
👉Регистрация
algocode помогает готовиться к собеседованиям в Big Tech — от алгоритмов и system design до таких «простых» секций про прошлый опыт.
#реклама
О рекламодателе
❤1
This media is not supported in your browser
VIEW IN TELEGRAM
❌ НЕЛЬЗЯ ТАК ИСПОЛЬЗОВАТЬ LAMBDA В PYTHON
Главная ошибка - превращать lambda в свалку логики: добавлять туда побочные эффекты, вызовы print, длинные условия и вычисления.
Такие лямбды плохо читаются, их невозможно нормально отлаживать, и они нарушают саму идею — быть короткой и чистой функцией. Всё сложное нужно выносить в обычную функцию. Подписывайся, больше фишек каждый день !
Главная ошибка - превращать lambda в свалку логики: добавлять туда побочные эффекты, вызовы print, длинные условия и вычисления.
Такие лямбды плохо читаются, их невозможно нормально отлаживать, и они нарушают саму идею — быть короткой и чистой функцией. Всё сложное нужно выносить в обычную функцию. Подписывайся, больше фишек каждый день !
# нельзя так делать — lambda с изменением состояния
data = [1, 2, 3]
logs = []
# опасный антипаттерн
process = lambda x: logs.append(f"processed {x}") or (x * 10)
result = [process(n) for n in data]
print("RESULT:", result)
print("LOGS:", logs)
👍3❤2