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
➡️ Модель в Django определяется как подкласс django.db.models.Model, где атрибуты класса представляют поля таблицы. Каждое поле создаётся экземпляром соответствующего класса (CharField, IntegerField и т.д.) с указанием параметров.


from django.db import models

class User(models.Model):
name = models.CharField(max_length=100)
age = models.IntegerField()


После определения модели необходимо создать и применить миграции для генерации таблицы в БД.

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

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🤔1
🔹HTTP-статус коды в RESTful API помогают клиенту понять результат запроса. Основные группы: 2xx (успех), 3xx (перенаправление), 4xx (ошибка клиента), 5xx (ошибка сервера).


from django.http import JsonResponse

def get_data(request):
return JsonResponse({'data': 'success'}, status=200) # Успешный запрос


Использование правильных статусов улучшает согласованность API и обработку ошибок.

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

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥1
Для отмены асинхронной задачи используется метод cancel() у объекта Task, созданного через asyncio.create_task(). При отмене задача получит исключение asyncio.CancelledError, которое можно обработать в блоке try/except.

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥1
😎Основные принципы написания тестов включают изолированность, повторяемость и проверку одного аспекта за раз. Тесты должны быть быстрыми, независимыми и покрывать как позитивные, так и негативные сценарии.


def test_addition():
assert 2 + 2 == 4 # Простой assert для проверки логики


Использование setup и teardown методов помогает подготовить и очистить окружение. Моки и стабы изолируют тестируемый модуль от зависимостей.

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

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


pip install requests # Установка последней версии
pip install django==4.2 # Конкретная версия
pip install -r requirements.txt # Установка из файла


Флаг --user устанавливает пакет для текущего пользователя, -e - в режиме разработки.

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

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Стандартные инструменты профилирования включают встроенный модуль cProfile для детального анализа времени выполнения и timeit для измерения коротких участков кода. Сторонние решения типа Py-Spy, memory_profiler и line_profiler предоставляют дополнительную информацию о потреблении памяти и построчном выполнении.

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
🔹Паттерн Facade предоставляет упрощённый интерфейс к сложной системе классов. Реализуется через класс-обёртку, который инкапсулирует взаимодействие с подсистемами.


class SubsystemA:
def operation_a(self):
return "Subsystem A"

class Facade:
def __init__(self):
self._subsystem_a = SubsystemA()

def operation(self):
return f"Facade: {self._subsystem_a.operation_a()}"


Клиент работает только с Facade, не зная о внутренней реализации. Упрощает использование сложных систем.

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

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
➡️ Для реализации OAuth в Python API используются библиотеки authlib или oauthlib, интегрирующиеся с популярными фреймворками.


from authlib.integrations.flask_client import OAuth

oauth = OAuth(app)
oauth.register(name='google', client_id='...', client_secret='...')


Настройка включает регистрацию приложения у провайдера, обработку callback-URL и проверку токенов. Для FastAPI/Django существуют аналогичные решения.

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

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Метод __call__() позволяет экземпляру класса вести себя как функция, вызываясь при обращении к объекту с круглыми скобками. Часто используется для создания вызываемых объектов с сохранением состояния между вызовами.

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
➡️ Функция asyncio.create_task() запускает корутину как асинхронную задачу, позволяя ей выполняться конкурентно. Возвращает объект Task, который можно использовать для отмены или ожидания завершения.


import asyncio

async def background_task():
await asyncio.sleep(1)

task = asyncio.create_task(background_task())


Задачи автоматически добавляются в цикл событий и выполняются без блокировки основного потока.

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

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9
👉 Для документации используется docstring — многострочная строка под объявлением функции. Применяют форматы Google, NumPy или reST.


def calculate_sum(a, b):
"""
Adds two numbers and returns the result.

Args:
a (int): First number
b (int): Second number

Returns:
int: Sum of a and b
"""
return a + b


Особенности:
- Доступна через help(calculate_sum) или __doc__
- Автоматически подхватывается IDE и генераторами документации
- Рекомендуется для публичных API и сложной логики

PEP 257 описывает стандарты оформления docstrings.

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

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9
Локальные переменные объявляются внутри функции и доступны только в её области видимости. Глобальные переменные определяются вне функций, доступны во всем модуле, но для изменения внутри функции требуется ключевое слово global.

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
__len__() — специальный метод, вызываемый функцией len(). Должен возвращать целое число ≥ 0, представляющее длину объекта.


class MyCollection:
def __len__(self):
return 10


Ключевые особенности:
- Обязателен для объектов, поддерживающих определение длины
- Вызывается автоматически при использовании len(obj)
- Должен возвращать только целое число (int)

Реализуется в коллекциях (list, dict), пользовательских контейнерах и итерируемых объектах.

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

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
👉 При использовании try-except внутри цикла, итерации продолжаются после обработки исключения. Это позволяет обрабатывать ошибки для отдельных элементов без прерывания всего цикла.


for item in data:
try:
process(item)
except ValueError:
handle_error()


Особенности работы:
- Блок except перехватывает исключения только для текущей итерации
- Цикл продолжает работу со следующего элемента после обработки ошибки
- Позволяет реализовать устойчивую обработку данных с ошибками

Часто используется при обработке коллекций с потенциально проблемными элементами.

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

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
Самый простой способ — преобразовать список в множество (set), которое автоматически удаляет дубликаты, а затем обратно в список. Для сохранения порядка элементов можно использовать dict.fromkeys() или перебор с проверкой вхождения в новый список.

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
🟠 Кортеж создается с помощью круглых скобок (), внутри которых перечисляются элементы через запятую. Если кортеж содержит один элемент, после него ставится запятая, чтобы отличить от обычного выражения в скобках.

empty_tuple = ()  # Пустой кортеж
single_element_tuple = (42,) # Кортеж с одним элементом
multiple_elements_tuple = (1, 2, 3) # Кортеж с несколькими элементами


Кортеж также можно создать без скобок, просто перечислив элементы через запятую:
another_tuple = 4, 5, 6


Кортежи неизменяемы, поэтому после создания их элементы нельзя изменить.

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

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
➡️ Синтаксис среза: list[start:stop:step], где все параметры опциональны.


nums = [0, 1, 2, 3, 4]
nums[1:4] # [1, 2, 3] (элементы с 1 до 3 индекса)
nums[::2] # [0, 2, 4] (каждый второй элемент)


Особенности:
- start — включительно, stop — исключительно
- Отрицательные индексы отсчитываются с конца
- Возвращает новый список, не изменяя оригинал
- Работает аналогично для строк, кортежей и других последовательностей

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

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


task = asyncio.create_task(asyncio.shield(critical_operation()))


Основные особенности:
- Защищенная задача продолжит выполнение, но её await выбросит CancelledError
- Не предотвращает отмену самой защищаемой корутины, только внешней обёртки
- Полезен для обязательных операций (сохранение данных, закрытие соединений)

Используется в связке с try/except для обработки отмены.

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

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

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


from rest_framework import serializers, viewsets

class BookSerializer(serializers.ModelSerializer):
class Meta:
model = Book
fields = '__all__'

class BookViewSet(viewsets.ModelViewSet):
queryset = Book.objects.all()
serializer_class = BookSerializer


Ключевые шаги:
1. Сериализаторы преобразуют модели в JSON и обратно
2. ViewSets объединяют логику для CRUD операций
3. Роутеры автоматически генерируют URL-адреса

Регистрация в urls.py:

router = DefaultRouter()
router.register(r'books', BookViewSet)


DRF добавляет авторизацию, пагинацию и документацию через Swagger.

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

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