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
➡️ Функция 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
Для обновления конкретного пакета:

pip install --upgrade package_name


Обновление всех устаревших пакетов:

pip list --outdated # Просмотр устаревших пакетов
pip install --upgrade $(pip list --outdated | awk 'NR>2 {print $1}')


Особенности:
- Флаг --upgrade можно сократить до -U
- Рекомендуется использовать в виртуальном окружении
- Для системных пакетов может потребоваться sudo (не рекомендуется)

Перед обновлением лучше проверить совместимость версий.

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

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

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
👉 Основные криптографические библиотеки:


from cryptography.fernet import Fernet # Симметричное шифрование
from Crypto.PublicKey import RSA # Асимметричное шифрование
import hashlib # Хеширование


Популярные решения:
- cryptography — современный стандарт для шифрования
- pycryptodome — расширенная криптография (AES, RSA)
- hashlib — встроенный модуль для хешей (SHA-256, MD5)
- bcrypt — специализированная библиотека для хеширования паролей

Для TLS/SSL используется встроенный модуль ssl.

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

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Классическая реализация предполагает Subject (наблюдаемый объект) и Observer (наблюдатели):


class Subject:
def __init__(self):
self._observers = []

def attach(self, observer):
self._observers.append(observer)

def notify(self, message):
for observer in self._observers:
observer.update(message)



class Observer:
def update(self, message):
print(f"Received: {message}")


Ключевые моменты:
- Subject хранит список наблюдателей и уведомляет их при изменениях
- Observer определяет интерфейс для получения обновлений
- В Python часто реализуют через события или свойства (property)

Альтернативно можно использовать модуль observable из PyPI.

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

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍72🔥2
Использовать индексы для часто запрашиваемых полей, избегать N+1 проблемы через select_related или prefetch_related, ограничивать выборку только нужными полями через only() или defer(). Кэшировать результаты тяжелых запросов и анализ slow query log для выявления узких мест.

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
asyncio.TimeoutError возникает при превышении времени выполнения асинхронной операции. Для обработки таймаутов используйте asyncio.wait_for():


try:
result = await asyncio.wait_for(coroutine(), timeout=5.0)
except asyncio.TimeoutError:
handle_timeout()


Ключевые моменты:
- Применяется для ограничения времени выполнения корутин
- Отличается от встроенного TimeoutError (синхронные операции)
- Вместе с asyncio.shield() позволяет контролировать прерывание

Таймауты особенно важны для сетевых запросов и внешних API.

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

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
▶️ Python определяет типы переменных во время выполнения, а не компиляции. Одна переменная может менять тип при повторном присваивании:


value = 42 # int
value = "text" # str


Характеристики:
- Проверка типов происходит при выполнении операций
- Гибкость кода ценой возможных runtime-ошибок
- Использует duck typing

Отличается от статической типизации (C++, Java), где типы проверяются до запуска программы.

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

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
Метод close() принудительно останавливает выполнение генератора, вызывая GeneratorExit в точке его последней приостановки. После вызова close() генератор больше не может yield'ить значения и выбрасывает StopIteration при попытке итерации.

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
__delattr__() вызывается при попытке удаления атрибута через оператор del. Позволяет кастомизировать поведение при удалении:


class Example:
def __delattr__(self, name):
print(f"Deleting {name}")
object.__delattr__(self, name)


Ключевые особенности:
- Требует явного вызова object.__delattr__() для реального удаления
- Может блокировать удаление критичных атрибутов
- Вызывается только для оператора del, не влияет на delattr()

Используется редко, в основном для сложных деструкторов или защиты атрибутов.

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

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