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)
👍5❤3🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
🔥Python: САМЫЙ ЭФФЕКТИВНЫЙ АЛГОРИТМ ДЛЯ ПОИСКА
Нет «одного» идеального алгоритма на все случаи жизни, но для поиска по отсортированным данным классика — бинарный поиск с сложностью О лог н.
Вместо того чтобы проходить весь список по очереди, он каждый раз делит диапазон пополам и быстро сужает область поиска.
Главное правило: если можешь отсортировать данные и потом искать — почти всегда лучше использовать бинарный поиск, а не линейный проход.
Нет «одного» идеального алгоритма на все случаи жизни, но для поиска по отсортированным данным классика — бинарный поиск с сложностью О лог н.
Вместо того чтобы проходить весь список по очереди, он каждый раз делит диапазон пополам и быстро сужает область поиска.
Главное правило: если можешь отсортировать данные и потом искать — почти всегда лучше использовать бинарный поиск, а не линейный проход.
nums = [1, 4, 7, 9, 15, 20, 33, 42]
def binary_search(arr, target):
left, right = 0, len(arr) - 1
while left <= right:
mid = (left + right) // 2
if arr[mid] == target:
return True
if arr[mid] < target:
left = mid + 1
else:
right = mid - 1
return False
print(binary_search(nums, 33))
print(binary_search(nums, 100))
❤7🔥2👍1
🔥 На stepik вышел курс, который учит Создавать настоящие AI-сервисы, а не просто запускать скрипты?
Этот практический курс по Python и FastAPI покажет, как собрать полноценное приложение с ИИ, базой данных, автогенерацией контента и Telegram-ботом.
Ты пройдёшь путь от первого HTTP-запроса до рабочего сервиса, который сам генерирует текст через ИИ, сохраняет данные, отправляет результаты по расписанию и отвечает пользователям.
Никакой теории ради теории - только практические шаги, из которых рождается реальный продукт.
🎁 48 часов действует скидка в 40% процентов
👉 Начать учиться на Stepik
Этот практический курс по Python и FastAPI покажет, как собрать полноценное приложение с ИИ, базой данных, автогенерацией контента и Telegram-ботом.
Ты пройдёшь путь от первого HTTP-запроса до рабочего сервиса, который сам генерирует текст через ИИ, сохраняет данные, отправляет результаты по расписанию и отвечает пользователям.
Никакой теории ради теории - только практические шаги, из которых рождается реальный продукт.
🎁 48 часов действует скидка в 40% процентов
👉 Начать учиться на Stepik
❤5👍2🥰2
🚀 DR Tulu: Reinforcement Learning for Deep Research
DR Tulu-8B — первый открытый модель для долгосрочных задач глубоких исследований. Она демонстрирует конкурентоспособные результаты на бенчмарках, сопоставимых с OpenAI. Репозиторий включает библиотеки для разработки агентов, обучение с помощью RL и SFT.
🚀Основные моменты:
- Мощная библиотека агентов для глубоких исследований.
- Обучение с эволюционными рубриками.
- Поддержка высококонкурентного асинхронного управления запросами.
- Интеграция с существующими моделями и фреймворками.
📌 GitHub: https://github.com/rlresearch/dr-tulu
DR Tulu-8B — первый открытый модель для долгосрочных задач глубоких исследований. Она демонстрирует конкурентоспособные результаты на бенчмарках, сопоставимых с OpenAI. Репозиторий включает библиотеки для разработки агентов, обучение с помощью RL и SFT.
🚀Основные моменты:
- Мощная библиотека агентов для глубоких исследований.
- Обучение с эволюционными рубриками.
- Поддержка высококонкурентного асинхронного управления запросами.
- Интеграция с существующими моделями и фреймворками.
📌 GitHub: https://github.com/rlresearch/dr-tulu
❤4🔥3👍2
9 декабря(уже завтра!) в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Python-разработчика.
Как это будет:
Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Python-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы.
Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_py_bot
Реклама.
О рекламодателе.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
🐍⚙️ Python + Docker совет:
Не устанавливай зависимости в образ на «сыром» pip install — используй фиксированные версии и слой кеширования. Правильный паттерн:
1) сначала COPY requirements.txt
2) затем RUN pip install -r requirements.txt
3) потом COPY исходники
Так Docker кеширует слой с зависимостями — при изменении кода пересобирается только последний слой, а не весь образ. Это ускоряет CI/CD в разы и делает сборки предсказуемыми.
Не устанавливай зависимости в образ на «сыром» pip install — используй фиксированные версии и слой кеширования. Правильный паттерн:
1) сначала COPY requirements.txt
2) затем RUN pip install -r requirements.txt
3) потом COPY исходники
Так Docker кеширует слой с зависимостями — при изменении кода пересобирается только последний слой, а не весь образ. Это ускоряет CI/CD в разы и делает сборки предсказуемыми.
👍8❤5
🧠 Продвинутая типизация Python, о которой почти никто не знает
Статья показывает, что Python уже давно вышел за рамки простых
Главные идеи:
✔️
✔️
✔️ Python 3.13+ добавляет улучшенный вывод типов и строгие проверки, чтобы типизированный код стал надёжнее.
✔️ Поддержка typed function overloading - теперь можно описывать разные сигнатуры для одной функции, и анализаторы понимают их корректно.
📌 Вывод из статьи - Python типизация уже стала инструментом для архитектуры и предотвращения ошибок, особенно в больших проектах. Но большинство разработчиков использует только её простейший слой.
Кому полезно:
• работаешь с крупными кодовыми базами
• пишешь библиотеки
• хочешь меньше скрытых багов и более предсказуемые refactor-ы
Источник: martynassubonis.substack.com/p/advanced-overlooked-python-typing
Статья показывает, что Python уже давно вышел за рамки простых
List[int] и Optional[str].Главные идеи:
✔️
TypeGuard и новый TypeIs позволяют писать функции, которые доказательно сужают типы - например, проверка превращает Any в конкретный тип для дальнейшего кода.✔️
assert_never из typing помогает ловить случаи, когда ты забыл обработать один из вариантов, что особенно важно в match и сложных условных ветках.✔️ Python 3.13+ добавляет улучшенный вывод типов и строгие проверки, чтобы типизированный код стал надёжнее.
✔️ Поддержка typed function overloading - теперь можно описывать разные сигнатуры для одной функции, и анализаторы понимают их корректно.
📌 Вывод из статьи - Python типизация уже стала инструментом для архитектуры и предотвращения ошибок, особенно в больших проектах. Но большинство разработчиков использует только её простейший слой.
Кому полезно:
• работаешь с крупными кодовыми базами
• пишешь библиотеки
• хочешь меньше скрытых багов и более предсказуемые refactor-ы
Источник: martynassubonis.substack.com/p/advanced-overlooked-python-typing
👍6❤3🔥2🥰2
This media is not supported in your browser
VIEW IN TELEGRAM
🔥 Удобный контекстный менеджер для работы с файлами
Использование контекстного менеджера делает работу с файлами более безопасной и удобной. В этом примере мы создадим собственный контекстный менеджер для автоматического закрытия файла и обработки ошибок.
Использование контекстного менеджера делает работу с файлами более безопасной и удобной. В этом примере мы создадим собственный контекстный менеджер для автоматического закрытия файла и обработки ошибок.
class ManagedFile:
def __init__(self, filename, mode):
self.filename = filename
self.mode = mode
self.file = None
def __enter__(self):
self.file = open(self.filename, self.mode)
return self.file
def __exit__(self, exc_type, exc_val, exc_tb):
if self.file:
self.file.close()
with ManagedFile('example.txt', 'w') as f:
f.write('Hello, Custom Context!')
❤3😁3👍2🔥1
🐍 Хитрая ловушка в Python, на которую попадаются даже опытные
Интуитивно кажется, что это создаёт независимые строки матрицы.
Но на самом деле Python копирует ссылки - все три строки указывают на один и тот же список.
🔍 Поэтому изменение matrix[0][0] или append() влияет сразу на все строки.
🧠 Вывод программы:
[[1, 0, 0, 9],
[1, 0, 0, 9],
[1, 0, 0, 9]]
3
4
✔️ Как правильно создавать матрицу с независимыми строками:
matrix = [[0] * 3 for _ in range(3)]
Теперь каждая строка - отдельный список, и изменения не “протекают” по всей матрице.
matrix = [[0] * 3] * 3
matrix[0][0] = 1
matrix[1].append(9)
print(matrix)
print(len(matrix))
print(len(matrix[0]))
Интуитивно кажется, что это создаёт независимые строки матрицы.
Но на самом деле Python копирует ссылки - все три строки указывают на один и тот же список.
🧠 Вывод программы:
[[1, 0, 0, 9],
[1, 0, 0, 9],
[1, 0, 0, 9]]
3
4
✔️ Как правильно создавать матрицу с независимыми строками:
matrix = [[0] * 3 for _ in range(3)]
Теперь каждая строка - отдельный список, и изменения не “протекают” по всей матрице.
👍10❤2🔥1