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 предоставляет встроенную защиту от 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
👍4
Функция 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
👍3
Функция print() выводит переданные объекты в стандартный поток вывода, преобразуя их в строки. Основные параметры: sep (разделитель между аргументами), end (символ в конце вывода), file (объект для вывода, по умолчанию sys.stdout) и flush (принудительный сброс буфера).

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

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
Для получения значения по ключу в словаре используется синтаксис dict[key] или метод dict.get().


d = {'a': 1, 'b': 2}
print(d['a']) # 1 (KeyError если ключа нет)
print(d.get('c', 0)) # 0 (возвращает default вместо ошибки)


Метод setdefault() возвращает значение и добавляет ключ с default-значением, если его нет.


value = d.setdefault('c', 3) # Возвращает 3, добавляет 'c': 3 в словарь


Для проверки наличия ключа используется оператор in.

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

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


def lazy_load(file_path):
with open(file_path) as file:
for line in file:
yield line.strip() # Постепенная обработка


Каждый вызов next() или итерация возвращает очередной элемент без загрузки всего набора.


data_loader = lazy_load('large_file.txt')
print(next(data_loader)) # Только первая строка в памяти


Подходит для обработки больших файлов, потоковых данных и бесконечных последовательностей.

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

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
Переменная __version__ в модулях хранит строку с номером версии для удобного отслеживания совместимости. Обычно определяется в __init__.py модуля или импортируется из отдельного файла version.py, чтобы ее можно было получить через import module; print(module.__version__).

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Функция all() возвращает True, если все элементы итерируемого объекта истинны (или если он пуст).

python  
data = [True, 1, 'text']
print(all(data)) # True


Функция any() возвращает True, если хотя бы один элемент истинный.

python  
data = [False, 0, '']
print(any(data)) # False


Обе функции работают с любыми итерируемыми объектами (списки, кортежи, генераторы). Лениво вычисляются до первого False (для all) или True (для any).

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

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4👍3
Очередь asyncio.Queue предоставляет потокобезопасный механизм для передачи сообщений между асинхронными задачами. Основные методы:

queue = asyncio.Queue(maxsize=10)
await queue.put(item) # Добавление элемента
item = await queue.get() # Извлечение элемента


- put() блокирует корутину при заполненной очереди (если задан maxsize)
- get() ожидает появления элементов в пустой очереди
- Поддерживает методы join(), task_done() для отслеживания завершения обработки

Используется для организации асинхронных конвейеров обработки данных, где производители и потребители работают в разных корутинах.

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

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

✈️ 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
👍3👨‍💻1
Оператор or в условных выражениях возвращает первый операнд, который оценивается как True, или последний операнд, если все значения False. Логическое ИЛИ вычисляется по короткому циклу: если первый операнд True, второй не проверяется.


x = 0
y = 5
result = x or y # 5, так как x == 0 (False), возвращается y


Если оба операнда False, возвращается последний:


a = None
b = 0
res = a or b # 0, оба значения False, возвращается b


Часто используется для задания значений по умолчанию:


value = user_input or "default" # если user_input пустой, вернется "default"


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

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥3
При работе с файлами ошибки обрабатываются через блок try-except, перехватывая исключения типа FileNotFoundError, PermissionError или IOError. Использование контекстного менеджера with гарантирует корректное закрытие файла даже при возникновении ошибки.

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Полиморфизм через наследование позволяет разным классам использовать методы с одинаковыми именами, но разной реализацией. Для этого базовый класс определяет интерфейс, а дочерние классы переопределяют методы.


class Animal:
def make_sound(self):
raise NotImplementedError("Subclasses must implement this method")

class Dog(Animal):
def make_sound(self):
return "Woof!"

class Cat(Animal):
def make_sound(self):
return "Meow!"


При вызове make_sound() у объекта Dog или Cat выполняется соответствующая реализация, несмотря на одинаковый метод в базовом классе.

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

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


tuple1 = (1, 2, 3)
tuple2 = (4, 5, 6)
combined = tuple1 + tuple2 # (1, 2, 3, 4, 5, 6)


Кортежи неизменяемы, поэтому операция не модифицирует исходные объекты, а возвращает новый. Также можно использовать tuple(itertools.chain(tuple1, tuple2)) для сложных сценариев.

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

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
Функция filter() применяет указанную функцию-предикат к каждому элементу итерируемого объекта, возвращая итератор только с теми элементами, для которых функция вернула True. Полезна для выборки данных по условию без явного цикла, особенно в сочетании с lambda для простых фильтраций.

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
В Django URL-шаблоны определяют, какие view-функции обрабатывают запросы по конкретным путям. Они задаются в urls.py через path() или re_path() (для regex).


from django.urls import path
from . import views

urlpatterns = [
path('articles/', views.article_list), # Обработка /articles/
path('articles/<int:id>/', views.article_detail), # Динамический параметр id
]


Маршруты проверяются сверху вниз. Можно группировать URL через include(), передавая часть маршрутизации в приложение. Именованные пути (name='article-list') позволяют генерировать URL без жесткого кодирования.

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

✈️ Python собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Команда git revert отменяет изменения указанного коммита, создавая новый коммит с инвертированными изменениями.


git revert <commit-hash> # Создает новый коммит, отменяющий изменения


Если нужно отменить несколько коммитов, можно указать диапазон:


git revert <oldest-commit-hash>..<latest-commit-hash> # Отменяет все коммиты в диапазоне


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

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

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