Python вопросы с собеседований
25K subscribers
520 photos
19 videos
17 files
416 links
Вопросы с собеседований по Python

@workakkk - админ

@machinelearning_interview - вопросы с собесдований по Ml

@pro_python_code - Python

@data_analysis_ml - анализ данных на Python

@itchannels_telegram - 🔥 главное в ит

РКН: clck.ru/3FmrFd
Download Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
🧠 Ускорь import в Python-проектах с помощью lazy loading — без изменения логики

Если у тебя проект с тяжёлыми модулями (`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 — *ловушка с изменяемыми значениями по умолчанию*

Вопрос:
Что выведет следующий код?


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]

Каждый вызов получает новый список.

⚠️ Если вы работаете с функциями, которые принимают списки или словари — всегда проверяйте, не мутируется ли значение между вызовами.
👍114🔥2
🚀 Как оптимизировать 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
👍5