Python | Вопросы собесов
Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @sendme_ads
Показати більше📈 Аналітичний огляд Telegram-каналу Python | Вопросы собесов
Канал Python | Вопросы собесов (@python_easy_ru) у мовному сегменті Російська є активним учасником. На даний момент спільнота об'єднує 12 631 підписників, посідаючи 9 915 місце в категорії Технології та додатки та 51 035 місце у регіоні Росія.
📊 Показники аудиторії та динаміка
З моменту свого створення невідомо, проект продемонстрував стрімке зростання, зібравши аудиторію у 12 631 підписників.
За останніми даними від 16 жовтня, 2026, канал демонструє стабільну активність. Хоча за останні 30 днів спостерігається зміна кількості учасників на -115, а за останні 24 години на -6, загальне охоплення залишається високим.
- Статус верифікації: Не верифікований
- Рівень залученості (ER): Середній показник залученості аудиторії становить 6.29%. Протягом перших 24 годин після публікації контент зазвичай збирає 4.30% реакцій від загальної кількості підписників.
- Охоплення публікацій: В середньому кожен допис отримує 794 переглядів. Протягом першої доби публікація в середньому набирає 543 переглядів.
- Реакції та взаємодія: Аудиторія активно підтримує контент: середня кількість реакцій на один пост – 2.
- Тематичні інтереси: Контент зосереджений навколо ключових тем, таких як ставь, модуль, строка, docker, alice.
📝 Опис та контентна політика
Автор описує ресурс як майданчик для висловлення суб'єктивної думки:
“Сайт: https://easyoffer.ru/
Все каналы: t.me/+xGeAw6ckJ4liYzQy
Контакт для рекламы: @sendme_ads”
Завдяки високій частоті оновлень (останні дані отримано 17 жовтня, 2026), канал підтримує актуальність та високий рівень охоплення публікацій. Аналітика показує, що аудиторія активно взаємодіє з контентом, що робить його важливою точкою впливу в категорії Технології та додатки.
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 следует осторожно, чтобы избежать проблем с отладкой и неожиданным поведением программы.
🔥 ТОП ВОПРОСОВ С СОБЕСОВ
🔒 База собесов | 🔒 База тестовых
import unittest
class TestMathOperations(unittest.TestCase):
def test_add(self):
self.assertEqual(1 + 1, 2)
if __name__ == '__main__':
unittest.main()
2️⃣ doctest
➕ Позволяет писать тесты прямо в строках документации (docstrings) кода.
➕ Удобен для проверки примеров использования функций.
def add(a, b):
"""
Возвращает сумму a и b.
>>> add(1, 2)
3
>>> add(-1, 1)
0
"""
return a + b
if name == '__main__':
import doctest
doctest.testmod()
Внешние библиотеки
1️⃣ pytest
➕ Одна из самых популярных библиотек для тестирования в Python.
➕ Поддерживает простой и лаконичный синтаксис тестов.
➕ Поддерживает фикстуры, параметризацию тестов, плагины и многое другое.
def add(a, b):
return a + b
def test_add():
assert add(1, 2) == 3
assert add(-1, 1) == 0
if name == '__main__':
import pytest
pytest.main()
2️⃣ nose2
➕ Наследник библиотеки nose.
➕ Совместим с unittest и расширяет его возможности.
➕ Поддерживает плагины и расширяемость.
import unittest
class TestMathOperations(unittest.TestCase):
def test_add(self):
self.assertEqual(1 + 1, 2)
if name == '__main__':
import nose2
nose2.main()
3️⃣ hypothesis
➕ Библиотека для проперти-бейсд тестирования (property-based testing).
➕ Генерирует случайные данные для тестов и находит краевые случаи.
from hypothesis import given
from hypothesis.strategies import integers
def add(a, b):
return a + b
@given(integers(), integers())
def test_add(x, y):
assert add(x, y) == x + y
if name == '__main__':
import pytest
pytest.main()
4️⃣ mock (unittest.mock)
➕ Библиотека для создания фиктивных объектов и имитации поведения зависимостей.
➕ Включена в стандартную библиотеку Python начиная с версии 3.3 как unittest.mock.
import unittest
from unittest.mock import patch
def fetch_data():
# Представим, что эта функция делает запрос к внешнему API
return "Real data"
class TestFetchData(unittest.TestCase):
@patch('main.fetch_data', return_value="Mock data")
def test_fetch_data(self, mock_fetch):
result = fetch_data()
self.assertEqual(result, "Mock data")
if:
== 'main':
unittest.main()
5️⃣ tox
➕ Инструмент для автоматизации тестирования в различных средах.
➕ Полезен для тестирования кода на разных версиях Python и с разными зависимостями.
[tox]
envlist = py36, py37, py38
[testenv]
deps = pytest
commands = pytest
6️⃣ coverage
➕ Инструмент для измерения покрытия кода тестами.
➕ Генерирует отчеты, показывающие, какие части кода были протестированы, а какие нет.
coverage run -m pytest
coverage report
coverage html # Создает отчет в формате HTML
Выбор инструмента для тестирования зависит от ваших потребностей и предпочтений. Стандартные модули, такие как unittest и doctest, предоставляют базовые возможности для тестирования, в то время как внешние библиотеки, такие как pytest, nose2 и hypothesis, предлагают более мощные и гибкие инструменты для написания и выполнения тестов. Использование библиотек для измерения покрытия кода, таких как coverage, помогает убедиться, что ваш код полностью протестирован.
🔥 ТОП ВОПРОСОВ С СОБЕСОВ
🔒 База собесов | 🔒 База тестовыхunittest
Он является встроенным и предоставляет богатые возможности для написания и выполнения юнит-тестов.
Пример кода для юнит-тестирования:
Предположим, у нас есть модуль math_operations.py с функцией add:
# math_operations.py
def add(a, b):
return a + b
Теперь тест для этой функции:
# test_math_operations.py
import unittest
from math_operations import add
class TestMathOperations(unittest.TestCase):
def test_add(self):
self.assertEqual(add(1, 2), 3)
self.assertEqual(add(-1, 1), 0)
self.assertEqual(add(-1, -1), -2)
if __name__ == '__main__':
unittest.main()
Запуск тестов
Для него можно выполнить скрипт test_math_operations.py:
python test_math_operations.py
Или использовать команду unittest из командной строки:
python -m unittest test_math_operations.py
Использование pytest для юнит-тестирования
Предлагает более лаконичный и мощный подход к юнит-тестированию.
# test_math_operations.py
from math_operations import add
def test_add():
assert add(1, 2) == 3
assert add(-1, 1) == 0
assert add(-1, -1) == -2
Запуск тестов с pytest
Убедитесь, что он установлен. Вы можете установить его с помощью pip:
pip install pytest
Запуск тестов:
pytest test_math_operations.py
Юнит-тестирование — это важный метод тестирования, который помогает обеспечивать качество и надежность кода, проверяя отдельные модули или компоненты программы. Использование таких инструментов, как unittest и pytest, позволяет автоматизировать процесс тестирования, выявлять ошибки на ранних стадиях разработки и уверенно вносить изменения в код.
🔥 ТОП ВОПРОСОВ С СОБЕСОВ
🔒 База собесов | 🔒 База тестовых