Метод
Класс
Итераторы позволяют последовательно получать элементы без загрузки всей коллекции в память.
Ставь👍 , если было полезно!
Больше ответов на сайте👈
✈️ Python собеседования
__iter__()
возвращает сам итератор, а __next__()
возвращает следующий элемент последовательности. При исчерпании элементов вызывается StopIteration
.
class Counter:
def __init__(self, limit):
self.current = 0
self.limit = limit
def __iter__(self):
return self
def __next__(self):
if self.current < self.limit:
self.current += 1
return self.current
raise StopIteration
Класс
Counter
будет выдавать числа от 1 до указанного лимита. Итераторы позволяют последовательно получать элементы без загрузки всей коллекции в память.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
Для нахождения общих элементов двух множеств используется оператор
Альтернативный вариант с методом:
Оба способа возвращают новое множество, содержащее только элементы, присутствующие в обоих исходных множествах. Метод
Операция выполняется за O(min(len(a), len(b))) в среднем случае.
Ставь👍 , если было полезно!
Больше ответов на сайте👈
✈️ Python собеседования
&
или метод intersection()
.
set1 = {1, 2, 3}
set2 = {2, 3, 4}
result = set1 & set2 # {2, 3}
Альтернативный вариант с методом:
result = set1.intersection(set2) # {2, 3}
Оба способа возвращают новое множество, содержащее только элементы, присутствующие в обоих исходных множествах. Метод
intersection()
может принимать несколько аргументов для поиска пересечения между несколькими множествами. Операция выполняется за O(min(len(a), len(b))) в среднем случае.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Очередь
-
-
- Поддерживает методы
Используется для организации асинхронных конвейеров обработки данных, где производители и потребители работают в разных корутинах.
Ставь👍 , если было полезно!
Больше ответов на сайте👈
✈️ Python собеседования
asyncio.Queue
предоставляет потокобезопасный механизм для передачи сообщений между асинхронными задачами. Основные методы:
queue = asyncio.Queue(maxsize=10)
await queue.put(item) # Добавление элемента
item = await queue.get() # Извлечение элемента
-
put()
блокирует корутину при заполненной очереди (если задан maxsize) -
get()
ожидает появления элементов в пустой очереди - Поддерживает методы
join()
, task_done()
для отслеживания завершения обработки Используется для организации асинхронных конвейеров обработки данных, где производители и потребители работают в разных корутинах.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
Модели создаются как подклассы
-
- Типы данных (`Integer`, `String`) определяют формат столбцов
- Параметры вроде
Модели автоматически создают таблицы при вызове
Ставь👍 , если было полезно!
Больше ответов на сайте👈
✈️ Python собеседования
declarative_base()
, с атрибутами через Column()
. Каждый атрибут соответствует полю таблицы с указанием типа и параметров.
from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String(50), nullable=False)
-
__tablename__
задает имя таблицы в БД - Типы данных (`Integer`, `String`) определяют формат столбцов
- Параметры вроде
primary_key
и nullable
настраивают ограничения Модели автоматически создают таблицы при вызове
Base.metadata.create_all()
.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
Оптимальное покрытие включает unit, integration и e2e тесты в пропорции 70/20/10. Тест-кейсы должны быть максимально простыми, быстрыми и фокусироваться на поведении, а не на реализации.
Please open Telegram to view this post
VIEW IN TELEGRAM
Представления в Django — это Python-функции или классы, принимающие web-запросы и возвращающие ответы. Основные типы:
- FBV (Function-Based Views): Простые функции с ручной обработкой методов запроса
- CBV (Class-Based Views): Переиспользуемые классы с методами для разных HTTP-методов (get, post)
- Всегда принимают
Дополнительные возможности: декораторы, миксины, встроенные generic-классы для стандартных задач.
Ставь👍 , если было полезно!
Больше ответов на сайте👈
✈️ Python собеседования
from django.http import HttpResponse
from django.views import View
# Function-based view
def simple_view(request):
return HttpResponse("Hello World")
# Class-based view
class MyView(View):
def get(self, request):
return HttpResponse("GET request")
- FBV (Function-Based Views): Простые функции с ручной обработкой методов запроса
- CBV (Class-Based Views): Переиспользуемые классы с методами для разных HTTP-методов (get, post)
- Всегда принимают
request
и возвращают HttpResponse
(или подклассы) Дополнительные возможности: декораторы, миксины, встроенные generic-классы для стандартных задач.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
Идемпотентность гарантирует, что повторные идентичные запросы не изменяют состояние системы после первого выполнения. Основные подходы:
- Idempotency-Key: Клиент генерирует уникальный ключ для операций изменения (POST/PUT/PATCH)
- Серверная валидация: Сервер кеширует ответы по ключу и возвращает их при повторах
- HTTP-методы: GET, PUT, DELETE идемпотентны по спецификации, POST требует доп. обработки
Для критических операций (платежи, транзакции) рекомендуется реализовывать механизм проверки дубликатов на стороне сервера.
Ставь👍 , если было полезно!
Больше ответов на сайте👈
✈️ Python собеседования
# Использование уникальных ключей идемпотентности
headers = {'Idempotency-Key': 'uuid-string'}
requests.post(url, headers=headers, json=data)
- Idempotency-Key: Клиент генерирует уникальный ключ для операций изменения (POST/PUT/PATCH)
- Серверная валидация: Сервер кеширует ответы по ключу и возвращает их при повторах
- HTTP-методы: GET, PUT, DELETE идемпотентны по спецификации, POST требует доп. обработки
Для критических операций (платежи, транзакции) рекомендуется реализовывать механизм проверки дубликатов на стороне сервера.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
Анализ результатов помогает выявить узкие места в производительности, показывая точное время выполнения отдельных операций внутри функции.
Please open Telegram to view this post
VIEW IN TELEGRAM
Паттерн Strategy позволяет динамически менять алгоритмы, инкапсулируя их в отдельные классы. Основные компоненты:
- Strategy: Интерфейс для всех алгоритмов
- ConcreteStrategy: Конкретные реализации алгоритмов
- Context: Класс, использующий стратегию через композицию
Позволяет легко добавлять новые алгоритмы без изменения основного кода.
Ставь👍 , если было полезно!
Больше ответов на сайте👈
✈️ Python собеседования
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: Класс, использующий стратегию через композицию
Позволяет легко добавлять новые алгоритмы без изменения основного кода.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
Основные методы контроля выполнения цикла:
- Счетчик итераций: Ограничивает максимальное количество выполнений
- Изменяемое условие: Гарантирует выход при изменении ключевых переменных
- Таймаут: Для долгих операций добавляется проверка времени выполнения
Рекомендуется всегда предусматривать четкий критерий завершения и тестировать граничные условия.
Ставь👍 , если было полезно!
Больше ответов на сайте👈
✈️ Python собеседования
max_iterations = 1000
counter = 0
while condition and counter < max_iterations:
counter += 1
# Логика цикла
- Счетчик итераций: Ограничивает максимальное количество выполнений
- Изменяемое условие: Гарантирует выход при изменении ключевых переменных
- Таймаут: Для долгих операций добавляется проверка времени выполнения
Рекомендуется всегда предусматривать четкий критерий завершения и тестировать граничные условия.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
Кортежи занимают меньше памяти и работают быстрее, что делает их предпочтительными для фиксированных данных, а списки лучше подходят для динамических коллекций.
Please open Telegram to view this post
VIEW IN TELEGRAM
Замыкание — это функция, которая запоминает значения из enclosing scope даже после завершения работы внешней функции.
- Внешняя функция (outer_func) принимает параметр
- Вложенная функция сохраняет доступ к переменной
- При вызове
Замыкания полезны для создания фабрик функций и сохранения состояния между вызовами.
Ставь👍 , если было полезно!
Больше ответов на сайте👈
✈️ Python собеседования
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
Замыкания полезны для создания фабрик функций и сохранения состояния между вызовами.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
Пользовательские исключения создаются через наследование от базовых классов исключений (Exception или его подклассов).
- Наследование от
- Дополнительные параметры (например, code) добавляют контекст обработчику
- Документация (docstring) поясняет назначение исключения
Используется для точной обработки специфичных ошибок приложения.
Ставь👍 , если было полезно!
Больше ответов на сайте👈
✈️ Python собеседования
class CustomError(Exception):
"""Базовое пользовательское исключение"""
pass
class ValidationError(CustomError):
"""Ошибка валидации с дополнительными атрибутами"""
def __init__(self, message, code):
super().__init__(message)
self.code = code
- Наследование от
Exception
делает класс полноценным исключением - Дополнительные параметры (например, code) добавляют контекст обработчику
- Документация (docstring) поясняет назначение исключения
Используется для точной обработки специфичных ошибок приложения.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
Альтернативно можно использовать pathlib.Path.unlink() для более объектно-ориентированного подхода. Оба метода permanently удаляют файл, поэтому следует соблюдать осторожность.
Please open Telegram to view this post
VIEW IN TELEGRAM
Для импорта модуля из пакета используется точечная нотация, указывающая иерархию вложенности.
- Абсолютный импорт указывает полный путь от корня проекта
- Относительный импорт (через точки) возможен внутри пакета:
Пакет должен содержать файл
Ставь👍 , если было полезно!
Больше ответов на сайте👈
✈️ Python собеседования
from package.subpackage import module
from package.subpackage.module import specific_function
- Абсолютный импорт указывает полный путь от корня проекта
- Относительный импорт (через точки) возможен внутри пакета:
from .sibling_module import helper
Пакет должен содержать файл
__init__.py
(может быть пустым) для распознавания его как python-пакета. Импорт выполняется через поиск в sys.path
.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
Оператор
Здесь
Оператор
Ставь👍 , если было полезно!
Больше ответов на сайте👈
✈️ Python собеседования
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), делая условие истинным.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
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
для обновления пакета.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
Метод
Если
✈️ Python собеседования
__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__()
и поочередное сравнение элементов. Метод полезен для создания контейнеров с оптимизированной проверкой вхождения.Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM