Python | Вопросы собесов
Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @sendme_ads
Показати більше📈 Аналітичний огляд Telegram-каналу Python | Вопросы собесов
Канал Python | Вопросы собесов (@python_easy_ru) у мовному сегменті Російська є активним учасником. На даний момент спільнота об'єднує 12 638 підписників, посідаючи 9 922 місце в категорії Технології та додатки та 51 155 місце у регіоні Росія.
📊 Показники аудиторії та динаміка
З моменту свого створення невідомо, проект продемонстрував стрімке зростання, зібравши аудиторію у 12 638 підписників.
За останніми даними від 13 жовтня, 2026, канал демонструє стабільну активність. Хоча за останні 30 днів спостерігається зміна кількості учасників на -115, а за останні 24 години на -6, загальне охоплення залишається високим.
- Статус верифікації: Не верифікований
- Рівень залученості (ER): Середній показник залученості аудиторії становить 6.04%. Протягом перших 24 годин після публікації контент зазвичай збирає 4.18% реакцій від загальної кількості підписників.
- Охоплення публікацій: В середньому кожен допис отримує 763 переглядів. Протягом першої доби публікація в середньому набирає 528 переглядів.
- Реакції та взаємодія: Аудиторія активно підтримує контент: середня кількість реакцій на один пост – 2.
- Тематичні інтереси: Контент зосереджений навколо ключових тем, таких як ставь, модуль, строка, docker, alice.
📝 Опис та контентна політика
Автор описує ресурс як майданчик для висловлення суб'єктивної думки:
“Сайт: https://easyoffer.ru/
Все каналы: t.me/+xGeAw6ckJ4liYzQy
Контакт для рекламы: @sendme_ads”
Завдяки високій частоті оновлень (останні дані отримано 14 жовтня, 2026), канал підтримує актуальність та високий рівень охоплення публікацій. Аналітика показує, що аудиторія активно взаємодіє з контентом, що робить його важливою точкою впливу в категорії Технології та додатки.
dict) — это структура данных, которая хранит пары "ключ → значение".
🟠Создание словаря
Через {} (фигурные скобки)
my_dict = {"name": "Alice", "age": 25, "city": "New York"}
Изменение значения
my_dict["age"] = 26 # Меняем возраст
del — удаление по ключу
del my_dict["city"]
Перебор ключей (for key in dict)
for key in my_dict:
print(key, my_dict[key])
Проверка наличия ключа
if "name" in my_dict:
print("Ключ существует!")
🟠Генерация словарей (Dictionary Comprehension)
Создадим словарь квадратов чисел
squares = {x: x**2 for x in range(1, 6)}
print(squares) # {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
🟠Ключи должны быть хешируемыми (неизменяемыми)
Нельзя использовать list как ключ!
my_dict[[1, 2, 3]] = "Ошибка" # TypeError: unhashable type: 'list'
Можно использовать tuple, int, str, frozenset
my_dict[(1, 2, 3)] = "OK"
Ставь 👍 и забирай 📚 Базу знанийset) — это неупорядоченная коллекция уникальных элементов, которая работает на основе хеш-таблицы. Это значит, что только хешируемые (immutable) объекты могут быть добавлены в set.
🚩Можно добавить в `set`:
Числа (int, float, complex)
s = {1, 2.5, 3+4j}
Строки (str)
s = {"apple", "banana", "cherry"}
Кортежи (tuple), если они тоже содержат только неизменяемые объекты
s = {(1, 2), ("a", "b")}
Булевые значения (bool)** (но True считается 1, а False — 0)
s = {True, False, 1, 0}
print(s) # {False, True} (0 и 1 не добавятся повторно)
🚩Нельзя добавить в `set`
Изменяемые объекты (list, set, dict)
s = { [1, 2, 3] } # Ошибка: TypeError: unhashable type: 'list'
s = { {"key": "value"} } # Ошибка: TypeError: unhashable type: 'dict'
Кортежи с изменяемыми элементами
s = { (1, [2, 3]) } # Ошибка: TypeError
Ставь 👍 и забирай 📚 Базу знанийtry:
x = 1 / 0 # Ошибка деления на ноль
except ZeroDivisionError:
print("Ошибка! Записываем в лог...")
raise # Повторно выбрасываем то же исключение
Вывод
Ошибка! Записываем в лог...
Traceback (most recent call last):
File "script.py", line 2, in <module>
x = 1 / 0
ZeroDivisionError: division by zero
Пример: Логирование перед повторным выбросом
import logging
logging.basicConfig(filename="errors.log", level=logging.ERROR)
try:
user_input = int("abc") # Ошибка ValueError
except ValueError as e:
logging.error(f"Ошибка: {e}") # Записываем в лог
raise # Повторно выбрасываем исключение
Пример: Очистка ресурсов перед выбросом исключения
try:
file = open("data.txt", "r")
data = file.read()
except FileNotFoundError:
print("Файл не найден. Освобождаем ресурсы...")
raise # Снова выбрасываем исключение
finally:
file.close() # Гарантированно закроет файл
Ставь 👍 и забирай 📚 Базу знаний.txt — обычный текстовый файл
- .csv — таблица в текстовом формате
- .json, .xml, .html — текстовые форматы данных
Каждый символ в файле представлен в кодировке (например, в UTF-8 буква "А" занимает 1 байт).
В Python текстовые файлы открываются в режиме t (text mode).
# Запись в текстовый файл
with open("example.txt", "w", encoding="utf-8") as file:
file.write("Привет, мир!")
# Чтение текстового файла
with open("example.txt", "r", encoding="utf-8") as file:
content = file.read()
print(content) # Выведет: Привет, мир!
🚩Бинарные файлы
Бинарные файлы хранят данные в машинном формате (набор байтов). Они не предназначены для чтения человеком и требуют специальных программ для обработки.
- .exe — исполняемый файл
- .png, .jpg — изображения
- .mp3, .mp4 — аудио и видео файлы
- .dat, .bin — файлы с произвольными данными
Байты записываются напрямую без конвертации в текст. Например, число 123 может храниться в 4-байтовом формате (например, 01111011 в двоичном коде).
В Python бинарные файлы открываются в режиме b (binary mode).
# Запись бинарных данных
data = b'\x48\x65\x6C\x6C\x6F' # "Hello" в байтах
with open("example.bin", "wb") as file:
file.write(data)
# Чтение бинарных данных
with open("example.bin", "rb") as file:
content = file.read()
print(content) # Выведет: b'Hello'
Ставь 👍 и забирай 📚 Базу знанийasyncio) в Python не выполняет код параллельно, а переключается между задачами во время ожидания (I/O-bound).
Если в async-функции делать тяжёлые вычисления (CPU-bound), это блокирует asyncio, потому что в Python есть GIL (Global Interpreter Lock).
🚩Асинхронность в Python подходит для ввода-вывода (I/O-bound)
Асинхронность позволяет выполнять задачи без блокировки, но только если они ждут чего-то (файлы, сеть, БД).
import asyncio
import aiohttp
async def fetch(url):
async with aiohttp.ClientSession() as session:
async with session.get(url) as response:
return await response.text()
async def main():
urls = ["https://example.com"] * 5
results = await asyncio.gather(*(fetch(url) for url in urls))
asyncio.run(main())
🚩Проблема с `async` и тяжёлыми вычислениями (CPU-bound)
Если в async-функции делать тяжёлые вычисления, Python не сможет переключаться между задачами.
import asyncio
async def heavy_task(n):
print(f"Вычисляю {n}...")
total = sum(i**2 for i in range(n)) # Долгий процесс
return total
async def main():
await asyncio.gather(heavy_task(10**7), heavy_task(10**7))
asyncio.run(main())
🚩Как правильно выполнять вычисления в `async`?
🟠Использовать `asyncio.to_thread()` (делегирование в потоки)
В Python 3.9+ можно выполнять CPU-задачи в отдельных потоках, не блокируя asyncio.
import asyncio
def heavy_computation(n):
return sum(i**2 for i in range(n))
async def main():
result = await asyncio.to_thread(heavy_computation, 10**7)
print(result)
asyncio.run(main())
🟠Использовать `multiprocessing` (запуск на нескольких ядрах)
Так как Python использует GIL, единственный способ выполнять настоящий параллелизм — это multiprocessing.
import asyncio
import multiprocessing
def heavy_computation(n):
return sum(i**2 for i in range(n))
async def main():
loop = asyncio.get_running_loop()
with multiprocessing.Pool() as pool:
result = await loop.run_in_executor(pool, heavy_computation, 10**7)
print(result)
asyncio.run(main())
Ставь 👍 и забирай 📚 Базу знанийtype — это встроенная функция и метакласс, который:
Определяет тип объекта (type(obj)).
Создаёт новые классы динамически (type(name, bases, attrs)).
🟠1. `type(obj)`: Определение типа объекта
Функция type(obj) возвращает класс (тип) объекта.
print(type(42)) # <class 'int'>
print(type("hello")) # <class 'str'>
print(type([1, 2, 3])) # <class 'list'>
if type(42) is int:
print("Это целое число!")
🟠`type(name, bases, attrs)`: Создание класса динамически
Функция type может создавать новые классы "на лету".
MyClass = type("MyClass", (object,), {"x": 10, "hello": lambda self: "Hello!"})
obj = MyClass()
print(obj.x) # 10
print(obj.hello()) # Hello!
🟠`type` как метакласс
В Python type — это метакласс для всех классов, то есть классы тоже являются объектами type.
class A:
pass
print(type(A)) # <class 'type'>
Ставь 👍 и забирай 📚 Базу знанийProxy контролирует доступ к классу RealSubject, добавляя проверку доступа и логирование.
from abc import ABC, abstractmethod
class Subject(ABC):
@abstractmethod
def request(self):
pass
class RealSubject(Subject):
def request(self):
print("Реальный объект: Обработка запроса.")
class Proxy(Subject):
def __init__(self, real_subject):
self._real_subject = real_subject
def request(self):
if self.check_access():
self._real_subject.request()
self.log_access()
def check_access(self):
print("Заместитель: Проверка доступа перед выполнением запроса.")
return True
def log_access(self):
print("Заместитель: Логирование времени запроса.")
# Клиентский код
real_subject = RealSubject()
proxy = Proxy(real_subject)
proxy.request()
Ставь 👍 и забирай 📚 Базу знаний