Python | Вопросы собесов
Cайт: easyoffer.ru Реклама: @easyoffer_adv ВП: @easyoffer_vp Тесты t.me/+20tRfhrwPpM4NDQy Задачи t.me/+nsl4meWmhfQwNDVi Вакансии t.me/+cXGKkrOY2-w3ZTky
Показати більше📈 Аналітичний огляд Telegram-каналу Python | Вопросы собесов
Канал Python | Вопросы собесов (@python_easy_ru) у мовному сегменті Російська є активним учасником. На даний момент спільнота об'єднує 13 101 підписників, посідаючи 9 734 місце в категорії Технології та додатки та 50 704 місце у регіоні Росія.
📊 Показники аудиторії та динаміка
З моменту свого створення невідомо, проект продемонстрував стрімке зростання, зібравши аудиторію у 13 101 підписників.
За останніми даними від 10 червня, 2026, канал демонструє стабільну активність. Хоча за останні 30 днів спостерігається зміна кількості учасників на -55, а за останні 24 години на 1, загальне охоплення залишається високим.
- Статус верифікації: Не верифікований
- Рівень залученості (ER): Середній показник залученості аудиторії становить 8.86%. Протягом перших 24 годин після публікації контент зазвичай збирає 5.51% реакцій від загальної кількості підписників.
- Охоплення публікацій: В середньому кожен допис отримує 1 161 переглядів. Протягом першої доби публікація в середньому набирає 722 переглядів.
- Реакції та взаємодія: Аудиторія активно підтримує контент: середня кількість реакцій на один пост – 3.
- Тематичні інтереси: Контент зосереджений навколо ключових тем, таких як ставь, модуль, строка, docker, alice.
📝 Опис та контентна політика
Автор описує ресурс як майданчик для висловлення суб'єктивної думки:
“Cайт: easyoffer.ru
Реклама: @easyoffer_adv
ВП: @easyoffer_vp
Тесты t.me/+20tRfhrwPpM4NDQy
Задачи t.me/+nsl4meWmhfQwNDVi
Вакансии t.me/+cXGKkrOY2-w3ZTky”
Завдяки високій частоті оновлень (останні дані отримано 11 червня, 2026), канал підтримує актуальність та високий рівень охоплення публікацій. Аналітика показує, що аудиторія активно взаємодіє з контентом, що робить його важливою точкою впливу в категорії Технології та додатки.
def process_order(order):
# Проверка наличия товара на складе
for item in order['items']:
if not warehouse_has_item(item):
raise Exception("Товара нет на складе")
# Расчет общей стоимости заказа
total_price = 0
for item in order['items']:
total_price += item['price'] * item['quantity']
# Создание записи в базе данных
save_order_to_db(order, total_price)
# Отправка уведомления клиенту
send_confirmation_email(order['customer_email'])
Эта функция выполняет несколько задач на разных уровнях абстракции: проверка наличия товара, расчет стоимости, работа с базой данных, отправка email. Это нарушает принцип SLAP.
def process_order(order):
check_items_availability(order['items'])
total_price = calculate_total_price(order['items'])
save_order(order, total_price)
notify_customer(order['customer_email'])
def check_items_availability(items):
for item in items:
if not warehouse_has_item(item):
raise Exception("Товара нет на складе")
def calculate_total_price(items):
total_price = 0
for item in items:
total_price += item['price'] * item['quantity']
return total_price
def save_order(order, total_price):
save_order_to_db(order, total_price)
def notify_customer(email):
send_confirmation_email(email)
🤔 Почему это важно?
1️⃣ Упрощение понимания кода: Легче читать и понимать, когда каждая функция выполняет только одну задачу.
2️⃣ Легкость тестирования: Отдельные функции проще тестировать.
3️⃣ Поддерживаемость: Изменения в одной части программы менее вероятно вызовут ошибки в другой.
Принцип SLAP означает, что каждая функция должна выполнять задачи только на одном уровне абстракции. Это делает код более чистым и легким для понимания.
🔥 ТОП ВОПРОСОВ С СОБЕСОВ
🔒 База собесов | 🔒 База тестовыхopen(). Эта функция возвращает объект файла, который затем можно использовать для выполнения различных операций с файлом.
Синтаксис функции open():
file_object = open(file_name, mode)
file_name: Имя файла, который вы хотите открыть.
mode: Режим, в котором вы хотите открыть файл. Основные режимы включают:
➕ 'r': чтение (по умолчанию)
➕ 'w': запись (содержимое файла будет удалено)
➕ 'a': добавление (новые данные будут добавлены в конец файла)
➕ 'b': бинарный режим (добавляется к основному режиму, например 'rb' или 'wb')
Примеры:
Чтение файла
# Открытие файла в режиме чтения
with open('example.txt', 'r') as file:
content = file.read()
print(content)
Запись в файл
# Открытие файла в режиме записи
with open('example.txt', 'w') as file:
file.write('Hello, world!')
Добавление в файл
# Открытие файла в режиме добавления
with open('example.txt', 'a') as file:
file.write('\nAppended text.')
Чтение из файла
Файловый объект предоставляет несколько методов для чтения данных:
➕ read(size=-1): Читает весь файл или size байт, если указан.
➕ readline(size=-1): Читает одну строку или size байт, если указан.
➕ readlines(): Читает все строки файла и возвращает их в виде списка.
Примеры:
Чтение всего файла
with open('example.txt', 'r') as file:
content = file.read()
print(content)
Чтение файла построчно
with open('example.txt', 'r') as file:
for line in file:
print(line, end='') # `end=''` чтобы избежать двойного переноса строки
Чтение файла в список строк
with open('example.txt', 'r') as file:
lines = file.readlines()
print(lines)
Запись в файл
Файловый объект также предоставляет методы для записи данных:
➕ write(string): Записывает строку в файл.
➕ writelines(lines): Записывает список строк в файл.
Примеры:
Запись строки в файл
with open('example.txt', 'w') as file:
file.write('Hello, world!')
Запись списка строк в файл
lines = ['First line\n', 'Second line\n', 'Third line\n']
with open('example.txt', 'w') as file:
file.writelines(lines)
Использование менеджеров контекста (with)
Она автоматически закрывает файл после выхода из блока with, даже если возникло исключение.
with open('example.txt', 'r') as file:
content = file.read()
print(content)
Закрытие файла
Если файл открыт без использования with, его нужно закрыть вручную с помощью метода close().
file = open('example.txt', 'r')
content = file.read()
print(content)
file.close()
Дополнительные операции с файлами
Модуль os предоставляет функции для работы с файловой системой, такие как переименование, удаление и создание директорий.
Примеры:
Переименование файла
import os
os.rename('example.txt', 'new_example.txt')
Удаление файла
import os
os.remove('new_example.txt')
Создание директории
import os
os.mkdir('new_directory')
Удаление директории
import os
os.rmdir('new_directory')
Python предоставляет богатые возможности для работы с файлами, начиная с простого чтения и записи и заканчивая сложными операциями с файловой системой. Использование менеджеров контекста (with) обеспечивает безопасное и эффективное управление файлами.
🔥 ТОП ВОПРОСОВ С СОБЕСОВ
🔒 База собесов | 🔒 База тестовыхwith, гарантировать закрытие файла можно несколькими способами, в частности, используя конструкцию try-finally или модуль contextlib.
Использование try-finally
Позволяет обеспечить закрытие файла даже в случае возникновения исключения. В блоке finally можно указать код, который должен выполниться независимо от того, было ли исключение в блоке try или нет.
file = open('example.txt', 'r')
try:
content = file.read()
print(content)
finally:
file.close()
В этом примере:
➕ Файл открывается и читается в блоке try.
➕ Независимо от того, возникло ли исключение в блоке try или нет, файл будет закрыт в блоке finally.
Использование модуля contextlib
Предоставляет утилиты для работы с контекстными менеджерами. Одной из таких утилит является функция contextlib.closing, которая может быть использована для автоматического закрытия объекта, поддерживающего метод close.
from contextlib import closing
file = open('example.txt', 'r')
with closing(file) as f:
content = f.read()
print(content)
В этом примере:
➕ Файл открывается и оборачивается в контекстный менеджер closing.
➕ Когда блок with завершается, closing автоматически закрывает файл.
Создание пользовательского контекстного менеджера
Также можно создать свой собственный контекстный менеджер с помощью класса, который реализует методы __enter__ и exit.
class FileManager:
def __init__(self, filename, mode):
self.filename = filename
self.mode = mode
def __enter__(self):
self.file = open(self.filename, self.mode)
return self.file
def __exit__(self, exc_type, exc_value, traceback):
self.file.close()
# Использование
with FileManager('example.txt', 'r') as file:
content = file.read()
print(content)
В этом примере:
➕ Класс FileManager реализует методы enter и exit.
➕ Метод enter открывает файл и возвращает его.
➕ Метод exit закрывает файл, обеспечивая его корректное закрытие.
Гарантировать закрытие файла можно несколькими способами, помимо использования конструкции with:
1️⃣ Использовать конструкцию try-finally, чтобы файл всегда закрывался независимо от возникновения исключений.
2️⃣ Использовать модуль contextlib и его утилиту closing для автоматического закрытия файла.
3️⃣ Создать пользовательский контекстный менеджер, реализовав методы enter и exit.
Эти методы обеспечивают надёжное управление ресурсами и предотвращают утечки ресурсов, которые могут возникнуть при некорректном закрытии файлов.
🔥 ТОП ВОПРОСОВ С СОБЕСОВ
🔒 База собесов | 🔒 База тестовыхunittest, который является стандартным модулем для тестирования и поставляется вместе. Другие популярные библиотеки для тестирования включают pytest и nose.
Использование модуля unittest
Предоставляет инструменты для создания и выполнения тестов. Давайте рассмотрим основные шаги для написания тестов с использованием unittest.
Основные шаги для написания тестов:
1️⃣ Создание тестового класса: Тестовый класс должен наследоваться от unittest.TestCase.
2️⃣ Написание тестовых методов: Каждый тестовый метод должен начинаться с test_.
3️⃣ Использование методов утверждений: Методы утверждений (assert) используются для проверки условий, таких как assertEqual, assertTrue, assertFalse, assertRaises и другие.
4️⃣ Запуск тестов: Запуск тестов можно осуществить с помощью командной строки или специального вызова внутри скрипта.
Примеры использования:
Допустим, у нас есть простая функция для сложения двух чисел:
# Пример функции в файле my_module.py
def add(a, b):
return a + b
Теперь мы напишем тесты для этой функции:
# Пример теста в файле test_my_module.py
import unittest
from my_module import add
class TestAddFunction(unittest.TestCase):
def test_add_integers(self):
self.assertEqual(add(1, 2), 3)
self.assertEqual(add(-1, 1), 0)
self.assertEqual(add(-1, -1), -2)
def test_add_floats(self):
self.assertAlmostEqual(add(1.1, 2.2), 3.3)
def test_add_strings(self):
self.assertEqual(add('a', 'b'), 'ab')
if __name__ == '__main__':
unittest.main()
Запуск тестов
Тесты можно запускать разными способами. Вот несколько способов:
1️⃣ Запуск из командной строки:
python -m unittest test_my_module.py
2️⃣ Запуск тестов из файла:
Просто запустите файл test_my_module.py как обычный Python-скрипт.
python test_my_module.py
Использование pytest
Это мощная библиотека для тестирования, которая упрощает написание и выполнение тестов. Она поддерживает функциональные и модульные тесты и имеет лаконичный синтаксис.
# Пример функции в файле my_module.py
def add(a, b):
return a + b
Запуск тестов с pytest
Убедитесь, что pytest установлен. Вы можете установить его с помощью pip:
pip install pytest
Запуск тестов:
pytest test_my_module.py
Преимущества:
1️⃣ Простой и лаконичный синтаксис: Тесты пишутся проще и читаются легче.
2️⃣ Богатый функционал: Поддержка фикстур, параметризация тестов, расширенные возможности для ассертов.
3️⃣ Множество плагинов: Расширяемость за счет множества доступных плагинов.
Написание тестов — важная часть разработки программного обеспечения, которая помогает обнаруживать ошибки и обеспечивать качество кода. Для тестирования можно использовать стандартный модуль unittest или более мощную библиотеку pytest. Основные шаги включают создание тестовых классов, написание тестовых методов, использование утверждений и запуск тестов. Выбор инструмента зависит от ваших предпочтений и требований проекта, но оба подхода обеспечивают эффективное тестирование вашего кода.
🔥 ТОП ВОПРОСОВ С СОБЕСОВ
🔒 База собесов | 🔒 База тестовыхmath_operations.py с функцией add:
# math_operations.py
def add(a, b):
return a + b
Monkey Patching
Изменить функцию add, чтобы она вместо сложения выполняла вычитание. Мы можем сделать это с помощью monkey patching:
import math_operations
# Оригинальная функция
print(math_operations.add(5, 3)) # Вывод: 8
# Monkey patching
def new_add(a, b):
return a - b
math_operations.add = new_add
# После monkey patching
print(math_operations.add(5, 3)) # Вывод: 2
Пример с использованием стандартной библиотеки
Где изменим поведение метода str.upper:
# Оригинальный метод
print("hello".upper()) # Вывод: HELLO
# Monkey patching
def new_upper(self):
return self.lower()
str.upper = new_upper
# После monkey patching
print("hello".upper()) # Вывод: hello
Применение Monkey Patching в тестировании
Часто используется в тестировании для имитации поведения зависимостей или для замены реальных объектов на фиктивные (mock) объекты.
import unittest
from unittest.mock import patch
class ExternalService:
def fetch_data(self):
# Представим, что эта функция делает запрос к внешнему API
return "Real data"
def process_data():
service = ExternalService()
return service.fetch_data()
class TestProcessData(unittest.TestCase):
@patch('__main__.ExternalService.fetch_data', return_value="Mock data")
def test_process_data(self, mock_fetch_data):
result = process_data()
self.assertEqual(result, "Mock data")
if __name__ == '__main__':
unittest.main()
В этом примере:
➕ Используется unittest.mock.patch для замены метода fetch_data класса ExternalService на фиктивный метод, возвращающий "Mock data".
➕ Тест проверяет, что функция process_data возвращает подделанные данные вместо реальных данных.
Предостережения при его использовании
Хотя monkey patching может быть полезным, оно также может привести к проблемам, если использовать его неправильно:
1️⃣ Проблемы с отладкой: Динамическое изменение кода может затруднить отладку и понимание программы.
2️⃣ Неожиданное поведение: Изменение поведения стандартных библиотек или модулей может привести к неожиданным результатам в других частях программы.
3️⃣ Нарушение инкапсуляции: Monkey patching нарушает принцип инкапсуляции, так как изменения вносятся в код извне.
Monkey patching — мощная техника, которая позволяет динамически изменять поведение модулей и библиотек во время выполнения программы. Она может быть полезна для исправления ошибок, добавления функциональности или создания фиктивных объектов для тестирования. Однако использовать monkey patching следует осторожно, чтобы избежать проблем с отладкой и неожиданным поведением программы.
🔥 ТОП ВОПРОСОВ С СОБЕСОВ
🔒 База собесов | 🔒 База тестовых
Вже доступно! Дослідження Telegram за 2025 — головні інсайти року 
