🧩 sync-with-uv
Небольшой, но полезный пакет, который автоматизирует синхронизацию версий между
Зачем это нужно:
- Часто версии инструментов (black, ruff, mypy и др.) расходятся: одно указано в lock-файле, другое — в pre-commit.
- В итоге могут воспроизводиться разные окружения и непредсказуемые ошибки.
Что делает sync-with-uv:
- Автоматически подтягивает версии из
- Интегрируется как pre-commit hook.
- Поддерживает частичную синхронизацию — не затрагивает инструменты, для которых версии не заданы.
Итог: один источник правды для зависимостей, меньше ручной рутины и более стабильные пайплайны.
🔗 Репозиторий: https://github.com/tsvikas/sync-with-uv
Небольшой, но полезный пакет, который автоматизирует синхронизацию версий между
uv.lock и .pre-commit-config.yaml. Зачем это нужно:
- Часто версии инструментов (black, ruff, mypy и др.) расходятся: одно указано в lock-файле, другое — в pre-commit.
- В итоге могут воспроизводиться разные окружения и непредсказуемые ошибки.
Что делает sync-with-uv:
- Автоматически подтягивает версии из
uv.lock в .pre-commit-config.yaml. - Интегрируется как pre-commit hook.
- Поддерживает частичную синхронизацию — не затрагивает инструменты, для которых версии не заданы.
Итог: один источник правды для зависимостей, меньше ручной рутины и более стабильные пайплайны.
🔗 Репозиторий: https://github.com/tsvikas/sync-with-uv
👍5❤2
🔥Свежий курс со Stepik: Linux: полный апгрейд твоих скиллов
Хочешь реально понимать, что происходит под капотом твоей системы, а не просто кликать по GUI?
Без глубокого знания базы ты не инженер - ты просто пользователь.
🔹 В курсе ты:
- Освоишь bash, grep, sed, awk - инструменты, которыми живут админы.
- Разберёшь права, процессы, сеть, файловую систему и научишься чинить всё, что падает.
- Настроишь SSH, firewall, systemd, crontab, демоны и автозапуск.
- Научишься анализировать логи, следить за нагрузкой, и не паниковать при 100% CPU.
💡 Формат: пошаговое объяснение базы и разбор важных практик по работе с Linux.
🎯 После курса ты: будешь чувствовать Linux как родную среду и забудешь, что такое “permission denied”.
🚀 Сейчас действуют скидка целых - 30%, не упусти реальный шанс прокачаться.
👉 Забирай место на курсе со скидкой
Хочешь реально понимать, что происходит под капотом твоей системы, а не просто кликать по GUI?
Без глубокого знания базы ты не инженер - ты просто пользователь.
🔹 В курсе ты:
- Освоишь bash, grep, sed, awk - инструменты, которыми живут админы.
- Разберёшь права, процессы, сеть, файловую систему и научишься чинить всё, что падает.
- Настроишь SSH, firewall, systemd, crontab, демоны и автозапуск.
- Научишься анализировать логи, следить за нагрузкой, и не паниковать при 100% CPU.
💡 Формат: пошаговое объяснение базы и разбор важных практик по работе с Linux.
🎯 После курса ты: будешь чувствовать Linux как родную среду и забудешь, что такое “permission denied”.
🚀 Сейчас действуют скидка целых - 30%, не упусти реальный шанс прокачаться.
👉 Забирай место на курсе со скидкой
❤2🔥2👍1👎1
🐍 Хитрая задача с собеседования по Python
> Что выведет этот код и почему?
❓Вопрос: Почему list1 и list3 одинаковы?
🔍 Разбор:
Аргументы по умолчанию в Python вычисляются один раз — в момент определения функции, а не при каждом вызове.
Поэтому lst=[] создаётся один раз и сохраняется между вызовами, если вы не передали свой список явно.
🧠 Что произойдет:
- extend_list(10) → использует общий список [], теперь он [10]
- extend_list(123, []) → создаёт новый список [123]
- extend_list('a') → снова использует общий список → [10, 'a']
👉 Результат:
✅ Как исправить:
Если вы хотите, чтобы по умолчанию создавался новый список при каждом вызове, делайте так:
Это классическая ловушка Python-интервью - mutable default arguments.
Проверяет, понимаешь ли ты, как работают значения по умолчанию и область памяти.
> Что выведет этот код и почему?
def extend_list(val, lst=[]):
lst.append(val)
return lst
list1 = extend_list(10)
list2 = extend_list(123, [])
list3 = extend_list('a')
print(list1, list2, list3)
❓Вопрос: Почему list1 и list3 одинаковы?
🔍 Разбор:
Аргументы по умолчанию в Python вычисляются один раз — в момент определения функции, а не при каждом вызове.
Поэтому lst=[] создаётся один раз и сохраняется между вызовами, если вы не передали свой список явно.
🧠 Что произойдет:
- extend_list(10) → использует общий список [], теперь он [10]
- extend_list(123, []) → создаёт новый список [123]
- extend_list('a') → снова использует общий список → [10, 'a']
👉 Результат:
[10, 'a'] [123] [10, 'a']✅ Как исправить:
Если вы хотите, чтобы по умолчанию создавался новый список при каждом вызове, делайте так:
def extend_list(val, lst=None):
if lst is None:
lst = []
lst.append(val)
return lst
Это классическая ловушка Python-интервью - mutable default arguments.
Проверяет, понимаешь ли ты, как работают значения по умолчанию и область памяти.
🔥11❤1
📚 Знакомьтесь, хендбуки от Яндекс Образования
Бесплатные интерактивные учебники для студентов и начинающих специалистов по Python, C++ и машинному обучению. Теория, которая пригодится в решении реальных задач.
Погружайтесь в дисциплину с нуля или выбирайте отдельные темы, выполняйте задания и следите за прогрессом. Хенбуки помогут закрыть пробелы в знаниях, подготовиться к экзаменам или собеседованиям.
👉Учиться по хендбукам
Бесплатные интерактивные учебники для студентов и начинающих специалистов по Python, C++ и машинному обучению. Теория, которая пригодится в решении реальных задач.
Погружайтесь в дисциплину с нуля или выбирайте отдельные темы, выполняйте задания и следите за прогрессом. Хенбуки помогут закрыть пробелы в знаниях, подготовиться к экзаменам или собеседованиям.
👉Учиться по хендбукам
👍4