Замыкание — это функция, которая запоминает значения из 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
Функция
Работает только с целыми числами. Для отрицательных чисел возвращает строку с минусом перед префиксом.
Аналог встроенного форматирования: format(10, '#o') или f"{10:#o}".
Ставь👍 , если было полезно!
Больше ответов на сайте👈
✈️ Python собеседования
oct()
преобразует целое число в строку с восьмеричным представлением, начинающимся с префикса 0o
.
num = 64
print(oct(num)) # '0o100'
Работает только с целыми числами. Для отрицательных чисел возвращает строку с минусом перед префиксом.
print(oct(-8)) # '-0o10'
Аналог встроенного форматирования: format(10, '#o') или f"{10:#o}".
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
Библиотека
Поддерживает различные типы данных: строки, хеши, списки, множества.
Для транзакций используется
Ставь👍 , если было полезно!
Больше ответов на сайте👈
✈️ Python собеседования
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.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Для установки конкретной версии пакета используется синтаксис
Можно задать диапазон версий с помощью дополнительных операторов:
Допустимы модификаторы
Ставь👍 , если было полезно!
Больше ответов на сайте👈
✈️ Python собеседования
==
в команде 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)
Допустимы модификаторы
~=
(совместимые версии) и !=
(исключение версии).Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
Команда
Для отмены изменений в конкретном файле:
Флаг
Ставь👍 , если было полезно!
Больше ответов на сайте👈
✈️ Python собеседования
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
оставляют возможность повтора коммита.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Django предоставляет встроенную защиту от CSRF через middleware
Для AJAX-запросов токен передается в заголовке
Отключение защиты (не рекомендуется) делается декоратором
Ставь👍 , если было полезно!
Больше ответов на сайте👈
✈️ Python собеседования
django.middleware.csrf.CsrfViewMiddleware
.
# В форме добавляется CSRF-токен
<form method="POST">
{% csrf_token %}
</form>
Для AJAX-запросов токен передается в заголовке
X-CSRFToken
.
headers: {'X-CSRFToken': getCookie('csrftoken')}
Отключение защиты (не рекомендуется) делается декоратором
@csrf_exempt
. Проверка токена происходит автоматически для POST, PUT, DELETE запросов.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
Функция
Полезно для мониторинга или отладки асинхронного кода. Если передать аргумент
Не включает завершенные или отмененные задачи.
Ставь👍 , если было полезно!
Больше ответов на сайте👈
✈️ Python собеседования
asyncio.all_tasks()
возвращает множество всех выполняющихся задач в текущем цикле событий.
import asyncio
async def example():
await asyncio.sleep(1)
tasks = asyncio.all_tasks() # Получение всех активных задач
Полезно для мониторинга или отладки асинхронного кода. Если передать аргумент
loop
, вернет задачи конкретного цикла.
current_loop = asyncio.get_running_loop()
tasks = asyncio.all_tasks(current_loop)
Не включает завершенные или отмененные задачи.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Метод
Результат динамически связан с исходным словарем — изменения отражаются сразу.
Можно преобразовать в список:
Ставь👍 , если было полезно!
Больше ответов на сайте👈
✈️ Python собеседования
keys()
возвращает представление всех ключей в словаре.
d = {'a': 1, 'b': 2}
print(d.keys()) # dict_keys(['a', 'b'])
Результат динамически связан с исходным словарем — изменения отражаются сразу.
d['c'] = 3
print(d.keys()) # dict_keys(['a', 'b', 'c'])
Можно преобразовать в список:
list(d.keys())
. Работает за O(1), не создает копию данных.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
Паттерн 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