Паттерн State позволяет объекту изменять поведение при смене внутреннего состояния. Реализуется через отдельные классы-состояния и контекст, который делегирует им работу.
Каждое состояние инкапсулирует свою логику, а переходы между состояниями выполняются внутри методов
Ставь👍 , если было полезно!
Больше ответов на сайте👈
✈️ Python собеседования
class State:
def handle(self, context):
pass
class ConcreteStateA(State):
def handle(self, context):
context.state = ConcreteStateB()
class ConcreteStateB(State):
def handle(self, context):
context.state = ConcreteStateA()
class Context:
def __init__(self):
self.state = ConcreteStateA()
def request(self):
self.state.handle(self)
Каждое состояние инкапсулирует свою логику, а переходы между состояниями выполняются внутри методов
handle()
. Контекст хранит текущее состояние и вызывает его методы.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Для получения значения по ключу в словаре используется синтаксис
Метод
Для проверки наличия ключа используется оператор
Ставь👍 , если было полезно!
Больше ответов на сайте👈
✈️ Python собеседования
dict[key]
или метод dict.get()
.
d = {'a': 1, 'b': 2}
print(d['a']) # 1 (KeyError если ключа нет)
print(d.get('c', 0)) # 0 (возвращает default вместо ошибки)
Метод
setdefault()
возвращает значение и добавляет ключ с default-значением, если его нет.
value = d.setdefault('c', 3) # Возвращает 3, добавляет 'c': 3 в словарь
Для проверки наличия ключа используется оператор
in
.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
Генераторы позволяют загружать данные по требованию через
Каждый вызов
Подходит для обработки больших файлов, потоковых данных и бесконечных последовательностей.
Ставь👍 , если было полезно!
Больше ответов на сайте👈
✈️ Python собеседования
yield
, экономя память.
def lazy_load(file_path):
with open(file_path) as file:
for line in file:
yield line.strip() # Постепенная обработка
Каждый вызов
next()
или итерация возвращает очередной элемент без загрузки всего набора.
data_loader = lazy_load('large_file.txt')
print(next(data_loader)) # Только первая строка в памяти
Подходит для обработки больших файлов, потоковых данных и бесконечных последовательностей.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Функция
Функция
Обе функции работают с любыми итерируемыми объектами (списки, кортежи, генераторы). Лениво вычисляются до первого
Ставь👍 , если было полезно!
Больше ответов на сайте👈
✈️ Python собеседования
all()
возвращает True
, если все элементы итерируемого объекта истинны (или если он пуст). python
data = [True, 1, 'text']
print(all(data)) # True
Функция
any()
возвращает True
, если хотя бы один элемент истинный. python
data = [False, 0, '']
print(any(data)) # False
Обе функции работают с любыми итерируемыми объектами (списки, кортежи, генераторы). Лениво вычисляются до первого
False
(для all) или True
(для any).Ставь
Больше ответов на сайте
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
Please open Telegram to view this post
VIEW IN TELEGRAM
Для обновления конкретного пакета:
Обновление всех устаревших пакетов:
Особенности:
- Флаг
- Рекомендуется использовать в виртуальном окружении
- Для системных пакетов может потребоваться
Перед обновлением лучше проверить совместимость версий.
Ставь👍 , если было полезно!
Больше ответов на сайте👈
✈️ Python собеседования
pip install --upgrade package_name
Обновление всех устаревших пакетов:
pip list --outdated # Просмотр устаревших пакетов
pip install --upgrade $(pip list --outdated | awk 'NR>2 {print $1}')
Особенности:
- Флаг
--upgrade
можно сократить до -U
- Рекомендуется использовать в виртуальном окружении
- Для системных пакетов может потребоваться
sudo
(не рекомендуется) Перед обновлением лучше проверить совместимость версий.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
Оператор
Если оба операнда
Часто используется для задания значений по умолчанию:
Ставь👍 , если было полезно!
Больше ответов на сайте👈
✈️ Python собеседования
or
в условных выражениях возвращает первый операнд, который оценивается как True
, или последний операнд, если все значения False
. Логическое ИЛИ вычисляется по короткому циклу: если первый операнд True
, второй не проверяется.
x = 0
y = 5
result = x or y # 5, так как x == 0 (False), возвращается y
Если оба операнда
False
, возвращается последний:
a = None
b = 0
res = a or b # 0, оба значения False, возвращается b
Часто используется для задания значений по умолчанию:
value = user_input or "default" # если user_input пустой, вернется "default"
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Полиморфизм через наследование позволяет разным классам использовать методы с одинаковыми именами, но разной реализацией. Для этого базовый класс определяет интерфейс, а дочерние классы переопределяют методы.
При вызове
Ставь👍 , если было полезно!
Больше ответов на сайте👈
✈️ Python собеседования
class Animal:
def make_sound(self):
raise NotImplementedError("Subclasses must implement this method")
class Dog(Animal):
def make_sound(self):
return "Woof!"
class Cat(Animal):
def make_sound(self):
return "Meow!"
При вызове
make_sound()
у объекта Dog
или Cat
выполняется соответствующая реализация, несмотря на одинаковый метод в базовом классе.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
Для объединения двух кортежей используется оператор
Кортежи неизменяемы, поэтому операция не модифицирует исходные объекты, а возвращает новый. Также можно использовать
Ставь👍 , если было полезно!
Больше ответов на сайте👈
✈️ Python собеседования
+
, создающий новый кортеж с элементами обоих исходных.
tuple1 = (1, 2, 3)
tuple2 = (4, 5, 6)
combined = tuple1 + tuple2 # (1, 2, 3, 4, 5, 6)
Кортежи неизменяемы, поэтому операция не модифицирует исходные объекты, а возвращает новый. Также можно использовать
tuple(itertools.chain(tuple1, tuple2))
для сложных сценариев.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
В Django URL-шаблоны определяют, какие view-функции обрабатывают запросы по конкретным путям. Они задаются в
Маршруты проверяются сверху вниз. Можно группировать URL через
Ставь👍 , если было полезно!
Больше ответов на сайте👈
✈️ Python собеседования
urls.py
через path()
или re_path()
(для regex).
from django.urls import path
from . import views
urlpatterns = [
path('articles/', views.article_list), # Обработка /articles/
path('articles/<int:id>/', views.article_detail), # Динамический параметр id
]
Маршруты проверяются сверху вниз. Можно группировать URL через
include()
, передавая часть маршрутизации в приложение. Именованные пути (name='article-list') позволяют генерировать URL без жесткого кодирования.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
Команда
Если нужно отменить несколько коммитов, можно указать диапазон:
После выполнения откроется редактор для сообщения нового коммита. Используется, когда нужно безопасно отменить изменения в истории, не перезаписывая его.
Ставь👍 , если было полезно!
Больше ответов на сайте👈
✈️ Python собеседования
git revert
отменяет изменения указанного коммита, создавая новый коммит с инвертированными изменениями.
git revert <commit-hash> # Создает новый коммит, отменяющий изменения
Если нужно отменить несколько коммитов, можно указать диапазон:
git revert <oldest-commit-hash>..<latest-commit-hash> # Отменяет все коммиты в диапазоне
После выполнения откроется редактор для сообщения нового коммита. Используется, когда нужно безопасно отменить изменения в истории, не перезаписывая его.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Для защиты API применяют аутентификацию и авторизацию. Основные методы:
Дополнительно используют HTTPS, ограничение запросов (rate limiting) и проверку CORS. Для сложных сценариев подходят OAuth2 или библиотеки вроде
Ставь👍 , если было полезно!
Больше ответов на сайте👈
✈️ Python собеседования
# JWT-токены (FastAPI/Flask)
from fastapi.security import OAuth2PasswordBearer
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")
# API-ключи в заголовках
API_KEY = "secret_key"
def validate_key(api_key: str):
if api_key != API_KEY:
raise HTTPException(status_code=403)
Дополнительно используют HTTPS, ограничение запросов (rate limiting) и проверку CORS. Для сложных сценариев подходят OAuth2 или библиотеки вроде
Authlib
.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
Паттерн Iterator в Python реализуется через методы
Встроенные типы (list, dict) уже поддерживают итерацию. Для ленивых вычислений удобны генераторы (yield).
Ставь👍 , если было полезно!
Больше ответов на сайте👈
✈️ Python собеседования
__iter__()
и __next__()
. Класс становится итерируемым, если __iter__()
возвращает сам объект, а __next__()
возвращает следующий элемент или вызывает StopIteration
.
class Counter:
def __init__(self, max):
self.max = max
self.current = 0
def __iter__(self):
return self
def __next__(self):
if self.current >= self.max:
raise StopIteration
self.current += 1
return self.current - 1
Встроенные типы (list, dict) уже поддерживают итерацию. Для ленивых вычислений удобны генераторы (yield).
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Для измерения покрытия кода тестами используется библиотека
Метрика показывает, какая часть кода была выполнена во время тестов. Можно исключить файлы через
Ставь👍 , если было полезно!
Больше ответов на сайте👈
✈️ Python собеседования
coverage
.
coverage run -m pytest # Запуск тестов с отслеживанием покрытия
coverage report # Вывод отчета в консоль
coverage html # Генерация HTML-отчета
Метрика показывает, какая часть кода была выполнена во время тестов. Можно исключить файлы через
.coveragerc
. Оптимальное покрытие — 80-100%, но важнее осмысленность тестов.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM