This media is not supported in your browser
VIEW IN TELEGRAM
🧠 Ускорь import в Python-проектах с помощью lazy loading — без изменения логики
Если у тебя проект с тяжёлыми модулями (`pandas`,
Вот как это выглядит на практике:
Если у тебя проект с тяжёлыми модулями (`pandas`,
torch
, tensorflow`), но они не всегда нужны — не загружай их зря. Python позволяет **отложить импорт до первого использования**, через встроённый `importlib
.Вот как это выглядит на практике:
import importlib
# Обёртка для ленивого импорта
def lazy_import(name):
return importlib.util.LazyLoader(importlib.import_module(name))
# Использование
np = lazy_import('numpy')
# numpy ещё не загружен
# Теперь загрузится:
print(np.array([1, 2, 3]))
❤9👎2🔥1🥰1
🧠 Хитрая задача по Python — *ловушка с изменяемыми значениями по умолчанию*
Вопрос:
Что выведет следующий код?
Ваш ответ? 🤔
Многие ожидают:
Но фактически вывод будет:
🔍 Почему так происходит?
Параметр my_list=[] создаётся один раз — при определении функции. И он сохраняется между вызовами. То есть все вызовы функции используют один и тот же список по умолчанию.
Это одна из самых частых ошибок в продакшене.
✅ Правильный способ — использовать None как значение по умолчанию:
Теперь:
Каждый вызов получает новый список.
⚠️ Если вы работаете с функциями, которые принимают списки или словари — всегда проверяйте, не мутируется ли значение между вызовами.
Вопрос:
Что выведет следующий код?
def append_to_list(value, my_list=[]):
my_list.append(value)
return my_list
print(append_to_list(1))
print(append_to_list(2))
print(append_to_list(3))
Ваш ответ? 🤔
Многие ожидают:
[1]
[2]
[3]
Но фактически вывод будет:
python
[1]
[1, 2]
[1, 2, 3]
🔍 Почему так происходит?
Параметр my_list=[] создаётся один раз — при определении функции. И он сохраняется между вызовами. То есть все вызовы функции используют один и тот же список по умолчанию.
Это одна из самых частых ошибок в продакшене.
✅ Правильный способ — использовать None как значение по умолчанию:
def append_to_list(value, my_list=None):
if my_list is None:
my_list = []
my_list.append(value)
return my_list
Теперь:
[1]
[2]
[3]
Каждый вызов получает новый список.
⚠️ Если вы работаете с функциями, которые принимают списки или словари — всегда проверяйте, не мутируется ли значение между вызовами.
👍11❤4🔥2
🚀 Как оптимизировать Python‑код уже на старте — советы для новичков
Не нужно быть профи, чтобы писать быстрый и аккуратный код. Вот 7 простых приёмов, которые реально помогают:
1. Используй профайлеры (cProfile, Py‑Spy)
Перед оптимизацией — измерь время. Часто больше всего тормозят совсем неожиданные места.
2. Перестрой алгоритмы и структуры данных
Выбор между списком, множеством или словарём может кардинально изменить сложность: O(1) вместо O(n) при поиске.
3. Выбирай встроенные функции
4. Пиши list/dict comprehensions и используй zip, enumerate
Это компактнее, читабельнее и часто быстрее классических for-циклов.
5. Генераторы вместо списков, где не нужен весь набор сразу
Снижают потребление памяти и ускоряют обработку.
6. Переход на PyPy или JIT‑ускорители
PyPy, Numba и Cython могут дать прирост производительности в 2–100 раз для тяжёлых вычислений.
7. Избегай преждевременной оптимизации
Оптимизируй только то, что реально тормозит. Профайлер покажет, где именно.
🧩 Быстрый чек-лист:
• Измерил ли я время выполнения?
• Подходящие ли структуры данных?
• Используются ли встроенные функции?
• Применены ли comprehensions и генераторы?
• Рассматривал ли я PyPy или JIT?
• Код по-прежнему читаемый?
✅ Вывод: даже новичок может писать быстрый и понятный Python-код. Главное — думать, замерять и улучшать без фанатизма.
▶️ Подробности с кодом
Не нужно быть профи, чтобы писать быстрый и аккуратный код. Вот 7 простых приёмов, которые реально помогают:
1. Используй профайлеры (cProfile, Py‑Spy)
Перед оптимизацией — измерь время. Часто больше всего тормозят совсем неожиданные места.
2. Перестрой алгоритмы и структуры данных
Выбор между списком, множеством или словарём может кардинально изменить сложность: O(1) вместо O(n) при поиске.
3. Выбирай встроенные функции
map
, max
, join
— всё это написано на C и работает быстрее ручных циклов.4. Пиши list/dict comprehensions и используй zip, enumerate
Это компактнее, читабельнее и часто быстрее классических for-циклов.
5. Генераторы вместо списков, где не нужен весь набор сразу
Снижают потребление памяти и ускоряют обработку.
6. Переход на PyPy или JIT‑ускорители
PyPy, Numba и Cython могут дать прирост производительности в 2–100 раз для тяжёлых вычислений.
7. Избегай преждевременной оптимизации
Оптимизируй только то, что реально тормозит. Профайлер покажет, где именно.
🧩 Быстрый чек-лист:
• Измерил ли я время выполнения?
• Подходящие ли структуры данных?
• Используются ли встроенные функции?
• Применены ли comprehensions и генераторы?
• Рассматривал ли я PyPy или JIT?
• Код по-прежнему читаемый?
✅ Вывод: даже новичок может писать быстрый и понятный Python-код. Главное — думать, замерять и улучшать без фанатизма.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5👍4
📦 Pydantic Extra Types — коллекция дополнительных типов данных для Pydantic, которые не вошли в основную библиотеку. Проект расширяет возможности валидации данных, предлагая специфические форматы и проверки.
Типы подключаются как опциональные зависимости, позволяя выбирать только нужные компоненты. Например, можно добавить поддержку pendulum для работы с временными зонами.
🤖 GitHub
@python_job_interview
Типы подключаются как опциональные зависимости, позволяя выбирать только нужные компоненты. Например, можно добавить поддержку pendulum для работы с временными зонами.
🤖 GitHub
@python_job_interview
👍5