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

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

Backend - @frontview_backend
Python работа - @frontview_python_vacancies
Все IT вакансии - @frontview_all_vacancies
По рекламе - @frontviewit
Download Telegram
Замыкание — это функция, которая запоминает значения из 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
Пользовательские исключения создаются через наследование от базовых классов исключений (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
Для удаления файла используется функция os.remove(), передавая ей путь к файлу в виде строки. Предварительно стоит проверить существование файла через os.path.exists(), чтобы избежать ошибок.

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


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


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
Оператор 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
Конструкция with автоматически управляет ресурсами, гарантируя их освобождение после использования, даже если возникла ошибка. Она работает с объектами, поддерживающими контекстный менеджер (методы __enter__ и __exit__), например, при работе с файлами или сетевыми подключениями.

✈️ Python собеседования
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 для обновления пакета.

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

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

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

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

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
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
Функция 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)


Не включает завершенные или отмененные задачи.

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

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
Функция print() выводит переданные объекты в стандартный поток вывода, преобразуя их в строки. Основные параметры: sep (разделитель между аргументами), end (символ в конце вывода), file (объект для вывода, по умолчанию sys.stdout) и flush (принудительный сброс буфера).

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
Метод 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), не создает копию данных.

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

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
Паттерн State позволяет объекту изменять поведение при смене внутреннего состояния. Реализуется через отдельные классы-состояния и контекст, который делегирует им работу.


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(). Контекст хранит текущее состояние и вызывает его методы.

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

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
Функция asyncio.gather() запускает несколько корутин конкурентно и возвращает их результаты в порядке передачи. Принимает корутины или задачи как позиционные аргументы, поддерживает параметр return_exceptions для контроля обработки ошибок.

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