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

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

Backend - @frontview_backend
Python работа - @frontview_python_vacancies
Все IT вакансии - @frontview_all_vacancies
По рекламе - @frontviewit
Download Telegram
Функция zip() объединяет элементы нескольких итерируемых объектов попарно, создавая итератор кортежей. Работает до исчерпания самой короткой коллекции.


names = ['Alice', 'Bob', 'Charlie']
ages = [25, 30]
for name, age in zip(names, ages):
print(name, age)


Результат:

Alice 25
Bob 30


Для обработки всех элементов, включая непарные, можно использовать zip_longest из модуля itertools.

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

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
Конструкция try-except позволяет перехватывать и обрабатывать ошибки ввода-вывода, такие как FileNotFoundError или PermissionError.


try:
with open('file.txt', 'r') as file:
data = file.read()
except FileNotFoundError:
print("Файл не найден")
except IOError:
print("Ошибка чтения файла")


Блок try выполняет потенциально опасный код, а except ловит конкретные исключения. Можно обрабатывать несколько типов ошибок или использовать общий except IOError для всех операций ввода-вывода.

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

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
Чтобы вызвать метод родительского класса из дочернего, используется функция super(), которая возвращает прокси-объект родительского класса. Например, super().method_name() вызывает метод method_name родительского класса из дочернего.

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


def log_generator(func):
def wrapper(*args, **kwargs):
print("Generator started")
gen = func(*args, **kwargs)
for value in gen:
print(f"Yielded: {value}")
yield value
return wrapper

@log_generator
def count_to(n):
for i in range(n):
yield i


Декоратор log_generator перехватывает вызов генератора, логирует его запуск и каждое yielded значение. Важно, чтобы обёртка сама возвращала генератор, иначе потеряется ленивое выполнение.

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

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
🟠Множество создаётся с помощью фигурных скобок {} или функции set(). Элементы должны быть уникальными и неизменяемыми.


unique_numbers = {1, 2, 3} # Литерал множества
empty_set = set() # Пустое множество (не {} — это словарь)


Для преобразования списка или строки во множество используется set(), автоматически удаляющий дубликаты.

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

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
Для управления CORS в Python веб-приложениях используются middleware или специализированные пакеты, такие как flask-cors для Flask или django-cors-headers для Django. Эти инструменты позволяют настраивать разрешённые домены, методы HTTP-запросов и заголовки для кросс-доменных запросов.

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


class Resource:
def __del__(self):
print("Resource released") # Вызывается не всегда


Лучше использовать контекстные менеджеры (with) или явные методы типа close() для управления ресурсами.

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

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
🛑Функция pow() принимает два или три аргумента: основание, степень и необязательный модуль. Возвращает результат возведения в степень, а при наличии модуля — остаток от деления.


result = pow(2, 3) # 2 в степени 3 → 8
mod_result = pow(2, 3, 3) # (2³) % 3 → 2


Альтернатива оператору **, но с поддержкой модульной арифметики.

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

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

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN 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
🔹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
Для отмены асинхронной задачи используется метод cancel() у объекта Task, созданного через asyncio.create_task(). При отмене задача получит исключение asyncio.CancelledError, которое можно обработать в блоке try/except.

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


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


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

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

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

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
🔹Паттерн 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
➡️ Для реализации 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
Метод __call__() позволяет экземпляру класса вести себя как функция, вызываясь при обращении к объекту с круглыми скобками. Часто используется для создания вызываемых объектов с сохранением состояния между вызовами.

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
➡️ Функция 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
👉 Для документации используется 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
Локальные переменные объявляются внутри функции и доступны только в её области видимости. Глобальные переменные определяются вне функций, доступны во всем модуле, но для изменения внутри функции требуется ключевое слово global.

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