Девман для питонистов
539 subscribers
159 photos
3 videos
206 links
Веб-разработка на Python. Канал от практиков.

Сайт школы Девман: https://dvmn.org/
Контакт для связи: @yulya_devman
Download Telegram
После такого объявления доступ к классу datetime пропадёт. Вместо него будет переменная с датой.

Код из нашего примера может выглядеть так:
from datetime import datetime

start_datetime = datetime(2025, 1, 1, 0, 0, 0)

end_datetime = datetime(2025, 2, 1, 0, 0, 0)
print(end_datetime)

❗️Избегайте использования зарезервированных оригинальных имён модулей, классов, функций и переменных. Их использование, возможно, не сломает код сразу, но позже может доставить много проблем.

Для получения всех встроенных имён выполните код в python:

import builtins
print(dir(builtins))
👍2
✍️Новые возможности генераторов списков

Генераторы списков или List Comprehension — мощный инструмент для высушивания и упрощения кода. Инструмент реализует упрощенный подход к созданию списка, который задействует цикл for, а также инструкции if-else для определения того, что в итоге окажется в финальном списке.

Было:
squares = []
for x in range(10):
squares.append(x ** 2)

Стало:
squares = [x ** 2 for x in range(10)]


Преимущества:
– Простота чтения: без циклов for и вложенности;
– Скорость. Быстрее for-циклов, которые он и заменяет;
– Неизменность данных. Исходные данные изменять опасно, а когда эти данные типа list или dict часто начинаются проблемы. List comprehensions создает новый список, не меняя исходный.

В шестом альфа-релизе Python 3.15.0a6 (февраль 2026) появилась реализация PEP 798Unpacking in Comprehensions. До сих пор мы могли распаковывать коллекции внутри литералов списков/словарей ([*a, *b]), но не могли сделать то же самое внутри comprehensions (генераторов списков). PEP 798 исправляет это.

👉Склейка вложенных списков
Раньше:
list_of_lists = [[1, 2], [3, 4], [5, 6]] 
flattened = [x for sublist in list_of_lists for x in sublist]

С новым синтаксисом:
list_of_lists = [[1, 2], [3, 4], [5, 6]]
flattened = [*sublist for sublist in list_of_lists]

👉Слияние словарей

Раньше: цикл с update.

С новым синтаксисом:
dicts = [{"a": 1, "b": 2}, {"b": 3, "c": 4}, {"d": 5}]
merged = {**d for d in dicts}
# {'a': 1, 'b': 3, 'c': 4, 'd': 5}

👉Генераторы

gen = (*range(i) for i in range(3))  # 0, 0, 1, 0, 1, 2

❗️Осторожно:
– В Python 3.15 эта фича пока в альфе. Использовать в продакшене рано, но тестировать уже можно!
– Синтаксис работает только на верхнем уровне выражения. То есть [*x for x in y] — ок, а [x for x in [*y]] (если бы это имело смысл) — нет;
– В асинхронных генераторах пока есть нюансы с yield from.
3🔥3
🐍 Сколько зарабатывает миддл Python-разработчик в 2026 году?

По данным Dreamjob средняя зарплата миддл Python-разработчиков с 2026 году — 233 000 рублей! Но рынок меняется быстрее, чем требования в вакансиях, поэтому хотим собрать актуальную статистику по зарплатам и грейдам среди Python-разработчиков!

Пройдите короткий анонимный опрос — это займет меньше минуты!
🤔Про использование ИИ мы сейчас слышим из каждого утюга. Но так ли эффективно внедрение искусственного интеллекта в процессы?

Согласно отчету MIT, 95% процентов пилотных проектов не влияют на результаты компаний.

Почему так может быть? Мы собрали три ловушки, в которые попадают разработчики, которые используют ИИ-агентов. Делимся первой:

✍️Вайб-кодинг (vibe coding)
— Что это: код генерируется быстро, но критерии приемки и гейты качества либо отсутствуют, либо формальны;
— Симптом: «работает у меня». На следующий день — регрессии, ломается сборка, растёт шум в ревью;
— Пример: агент «поправил авторизацию», но не обновил тесты и не проверил пограничные случаи. Вы узнаете об этом по падению в проде или по жалобам;
— Лечение: сначала сделать базовые гейты обязательными, потом поднимать глубину делегирования написания кода ИИ.

А вы используете ИИ-агентов в своей работе и насколько удовлетворены результатами? Пройдите, короткий опрос, который займет меньше минуты! Рассказывайте о проблемах, с которыми сталкиваетесь при использовании ИИ, в комментариях!

Если ответов будет много, мы запостим еще две ловушки, с которыми сталкиваются разработчики!
Вы используете ИИ-агентов для разработки программных продуктов?
Anonymous Poll
24%
Нет, не использую
37%
Да, но не часто
36%
Да, часто
3%
Полностью отдал написание кода ИИ
Сталкивались с проблемами при использовании ИИ для разработки программных продуктов?
Anonymous Poll
12%
Нет, проблем нет
40%
Да, иногда бывают проблемы
37%
Да, проблем много
12%
Быстрее сделать самому ручками
Видим, что вы часто сталкиваетесь с проблемами при использовании ИИ в разработке. Мы уже писали о первой ловушке, которая мешает разработчикам научиться использовать ИИ в разработке. Сегодня поделимся еще двумя.

✍️Ложная автономность (proxy autonomy)
— Что это: кажется, что «агент делает», но вы всё продумываете за него;
— Симптом: чтобы получить результат, вы пишете слишком подробные инструкции до уровня «вот в этом файле поменяй эту функцию». Быстрее было бы сделать руками;
— Пример: задача выглядит как «сделай фичу», а по факту вы диктуете агенту пошаговый рецепт, потому что без него он не попадает в архитектуру.
— Лечение: поднимать глубину делегирования кодинга там, где можно описать ценность и критерии приемки, а не технические шаги. Инвестировать в контракты (например, схему API) и шаблоны задач.

✍️Разрастание скоупа (scope explosion)
— Что это: агент начинает «улучшать всё подряд»: правит форматирование, переименовывает, меняет архитектуру, добавляет лишние зависимости;
— Симптом: слишком большой набор изменений без понятной цели, много побочных правок, сложно ревьюить;
— Пример: вы попросили «починить баг», а агент параллельно переименовал половину модулей и заменил библиотеку логирования;
— Лечение: жесткие рамки (что трогаем/не трогаем), лимит на размер изменений, стоп-правила («остановись и спроси»), приоритет «минимальное изменение, которое дает ценность».

— Дополнительно: ввести бюджет код-ревью (Code Review Budget): лимит времени и внимания на ревью, под который подгоняете объем изменений;
— Дополнительно: фиксировать архитектуру и ценность ее компонентов, чтобы агент не «оптимизировал» то, что трогать нельзя.

Аналогия: вы приехали на замену масла, а мастер решил «заодно оптимизировать» систему охлаждения и разобрал полмашины. Иногда это делает лучше, но чаще превращает простую операцию в непредсказуемый ремонт.

👉А с какими еще ловушками при использовании ИИ-агентов вы сталкивались? Делитесь в комментариях!
🤔 Давайте вместе разберемся, что не так с этим кодом?
...
for vacancy in response.json()['items']:
...
pages = response.json()['pages']
...

👉 Чтобы понять, что можно исправить, загляните в типичные улучшения Девмана.

➡️Пишите в комментариях, что можно исправить!
Превращение JSON строки в структуру данных Python требует много процессорного времени. Этот ресурс не безграничен, поэтому нельзя допустить, чтобы программа транжирила его на неоправданно частые вызовы метода response.json().

Код из нашего примера может выглядеть так:
...
payload = response.json()
for vacancy in payload['items']:
...
pages = payload['pages']
...


Спасибо большое, что активно писали в комменты и предлагали свои варианты!
🔥3