Python собеседования
1.96K subscribers
340 photos
453 links
Подготовка к собеседованиям на позицию Python-разработчик

Еще больше на сайте https://frontview-it.ru

Backend - @frontview_backend
Python работа - @frontview_python_vacancies
Все IT вакансии - @frontview_all_vacancies
Download Telegram
Установить пакет через pip install line_profiler, затем декорируйте целевую функцию с помощью @profile и запустите скрипт через kernprof -l -v script.py. Инструмент покажет время выполнения каждой строки кода, включая количество вызовов и время на строку.

Анализ результатов помогает выявить узкие места в производительности, показывая точное время выполнения отдельных операций внутри функции.


✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Паттерн Strategy позволяет динамически менять алгоритмы, инкапсулируя их в отдельные классы. Основные компоненты:


class Strategy:
def execute(self, data):
pass

class ConcreteStrategyA(Strategy):
def execute(self, data):
return sorted(data)

class Context:
def __init__(self, strategy):
self._strategy = strategy

def execute_strategy(self, data):
return self._strategy.execute(data)


- Strategy: Интерфейс для всех алгоритмов
- ConcreteStrategy: Конкретные реализации алгоритмов
- Context: Класс, использующий стратегию через композицию

Позволяет легко добавлять новые алгоритмы без изменения основного кода.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Основные методы контроля выполнения цикла:


max_iterations = 1000
counter = 0
while condition and counter < max_iterations:
counter += 1
# Логика цикла


- Счетчик итераций: Ограничивает максимальное количество выполнений
- Изменяемое условие: Гарантирует выход при изменении ключевых переменных
- Таймаут: Для долгих операций добавляется проверка времени выполнения

Рекомендуется всегда предусматривать четкий критерий завершения и тестировать граничные условия.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
Списки изменяемы (mutable) и поддерживают добавление, удаление и изменение элементов, тогда как кортежи неизменяемы (immutable) и не могут быть изменены после создания.

Кортежи занимают меньше памяти и работают быстрее, что делает их предпочтительными для фиксированных данных, а списки лучше подходят для динамических коллекций.


✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
Замыкание — это функция, которая запоминает значения из enclosing scope даже после завершения работы внешней функции.


def outer_func(x):
def inner_func(y):
return x + y
return inner_func

closure = outer_func(10)
result = closure(5) # 15


- Внешняя функция (outer_func) принимает параметр x и возвращает вложенную функцию (inner_func)
- Вложенная функция сохраняет доступ к переменной x даже после завершения outer_func
- При вызове closure(5) она использует запомненное значение x=10

Замыкания полезны для создания фабрик функций и сохранения состояния между вызовами.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
Пользовательские исключения создаются через наследование от базовых классов исключений (Exception или его подклассов).


class CustomError(Exception):
"""Базовое пользовательское исключение"""
pass

class ValidationError(CustomError):
"""Ошибка валидации с дополнительными атрибутами"""
def __init__(self, message, code):
super().__init__(message)
self.code = code


- Наследование от Exception делает класс полноценным исключением
- Дополнительные параметры (например, code) добавляют контекст обработчику
- Документация (docstring) поясняет назначение исключения

Используется для точной обработки специфичных ошибок приложения.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
Для удаления файла используется функция os.remove(), передавая ей путь к файлу в виде строки. Предварительно стоит проверить существование файла через os.path.exists(), чтобы избежать ошибок.

Альтернативно можно использовать pathlib.Path.unlink() для более объектно-ориентированного подхода. Оба метода permanently удаляют файл, поэтому следует соблюдать осторожность.


✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
Для импорта модуля из пакета используется точечная нотация, указывающая иерархию вложенности.


from package.subpackage import module
from package.subpackage.module import specific_function


- Абсолютный импорт указывает полный путь от корня проекта
- Относительный импорт (через точки) возможен внутри пакета:

from .sibling_module import helper


Пакет должен содержать файл __init__.py (может быть пустым) для распознавания его как python-пакета. Импорт выполняется через поиск в sys.path.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
3
Оператор not инвертирует логическое значение выражения. Если выражение истинно, not возвращает False, и наоборот. Часто используется в условных конструкциях для проверки обратных условий.


x = False
if not x:
print("Условие выполнено")


Здесь not x превращает False в True, и блок кода выполняется.


value = 10
if not value > 20:
print("Значение не больше 20")


Оператор not применяется к результату сравнения value > 20 (который False), делая условие истинным.


Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍62
Конструкция with автоматически управляет ресурсами, гарантируя их освобождение после использования, даже если возникла ошибка. Она работает с объектами, поддерживающими контекстный менеджер (методы __enter__ и __exit__), например, при работе с файлами или сетевыми подключениями.

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
pip — стандартный менеджер пакетов для установки модулей. Основные команды:


pip install package_name # Установка пакета
pip install package==1.0.0 # Установка конкретной версии
pip uninstall package_name # Удаление пакета
pip list # Список установленных пакетов
pip show package_name # Информация о пакете


Для работы с зависимостями проекта:


pip freeze > requirements.txt # Экспорт зависимостей
pip install -r requirements.txt # Установка из файла


Можно указывать дополнительные опции, например --user для установки в домашнюю директорию или -U для обновления пакета.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
Метод __contains__() определяет поведение оператора in для пользовательских объектов. При вызове x in obj интерпретатор ищет obj.__contains__(x) и возвращает True или False.


class MyContainer:
def __contains__(self, item):
return item in [1, 2, 3]

container = MyContainer()
print(3 in container) # True
print(5 in container) # False


Если __contains__() не реализован, Python использует __iter__() и поочередное сравнение элементов. Метод полезен для создания контейнеров с оптимизированной проверкой вхождения.

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
Словарь создается с помощью фигурных скобок {} с парами ключ: значение или через конструктор dict(). Ключи должны быть неизменяемыми типами (строки, числа, кортежи), а значения — любыми объектами.

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Функция oct() преобразует целое число в строку с восьмеричным представлением, начинающимся с префикса 0o.


num = 64
print(oct(num)) # '0o100'


Работает только с целыми числами. Для отрицательных чисел возвращает строку с минусом перед префиксом.


print(oct(-8)) # '-0o10'


Аналог встроенного форматирования: format(10, '#o') или f"{10:#o}".

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Библиотека redis-py предоставляет клиент для взаимодействия с Redis. Основные операции выполняются через класс Redis.


import redis
r = redis.Redis(host='localhost', port=6379, db=0)
r.set('key', 'value') # Запись строки
print(r.get('key')) # Чтение значения


Поддерживает различные типы данных: строки, хеши, списки, множества.


r.hset('user', 'name', 'Alice') # Хеш-таблица
r.lpush('list', 1, 2, 3) # Список


Для транзакций используется pipeline(), для Pub/Sub — отдельный API.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
Сигналы в Django позволяют выполнять действия при возникновении определенных событий (например, сохранение модели). Для их использования нужно импортировать нужный сигнал из django.db.models.signals, создать функцию-обработчик и подключить ее через декоратор @receiver или метод connect().

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Для установки конкретной версии пакета используется синтаксис == в команде pip install.


pip install package_name==1.2.3 # Точно указанная версия
pip install package_name>=1.2.0 # Минимальная версия


Можно задать диапазон версий с помощью дополнительных операторов:

pip install "package_name>=1.0.0,<2.0.0" # Версии от 1.0.0 до 2.0.0 (исключая 2.0.0)


Допустимы модификаторы ~= (совместимые версии) и != (исключение версии).

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
Команда git reset отменяет изменения, возвращая репозиторий к указанному коммиту.


git reset --soft HEAD~1 # Отмена последнего коммита с сохранением изменений в индексе
git reset --mixed HEAD~1 # Отмена коммита и индекса (изменения остаются в рабочей директории)
git reset --hard HEAD~1 # Полная отмена коммита и всех изменений (осторожно!)


Для отмены изменений в конкретном файле:

git reset HEAD file.txt # Удаление файла из индекса


Флаг --hard необратимо удаляет изменения, --soft и --mixed оставляют возможность повтора коммита.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Кэширование в RESTful API можно реализовать через HTTP-заголовки (Cache-Control, ETag) для клиентского кэширования или серверные решения (Redis, Memcached) для хранения часто запрашиваемых данных. Стратегии кэширования включают TTL (время жизни кэша), инвалидацию при изменении данных и кэширование ответов целиком или отдельных ресурсов.

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Django предоставляет встроенную защиту от CSRF через middleware django.middleware.csrf.CsrfViewMiddleware.


# В форме добавляется CSRF-токен
<form method="POST">
{% csrf_token %}
</form>


Для AJAX-запросов токен передается в заголовке X-CSRFToken.


headers: {'X-CSRFToken': getCookie('csrftoken')}


Отключение защиты (не рекомендуется) делается декоратором @csrf_exempt. Проверка токена происходит автоматически для POST, PUT, DELETE запросов.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4