Python | Вопросы собесов
Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @easyoffer_adv
Mostrar más📈 Análisis del canal de Telegram Python | Вопросы собесов
El canal Python | Вопросы собесов (@python_easy_ru) en el segmento lingüístico de Ruso es un actor destacado. Actualmente la comunidad reúne a 12 893 suscriptores, ocupando la posición 9 729 en la categoría Tecnologías y Aplicaciones y el puesto 50 792 en la región Rusia.
📊 Métricas de audiencia y dinámica
Desde su creación el невідомо, el proyecto ha mostrado un crecimiento acelerado, reuniendo a 12 893 suscriptores.
Según los últimos datos del 01 agosto, 2026, el canal mantiene una actividad estable. En los últimos 30 días la variación de miembros fue de -117, y en las últimas 24 horas de -4, conservando un alto alcance.
- Estado de verificación: No verificado
- Tasa de interacción (ER): El promedio de interacción de la audiencia es 6.88%. Durante las primeras 24 horas tras publicar, el contenido suele obtener 4.88% de reacciones respecto al total de suscriptores.
- Alcance de las publicaciones: Cada publicación recibe en promedio 887 visualizaciones. En el primer día suele acumular 629 visualizaciones.
- Reacciones e interacción: La audiencia responde de forma activa: el promedio de reacciones por publicación es 1.
- Intereses temáticos: El contenido se centra en temas clave como ставь, модуль, строка, docker, alice.
📝 Descripción y política de contenido
El autor describe el recurso como un espacio para expresar opiniones subjetivas:
“Сайт: https://easyoffer.ru/
Все каналы: t.me/+xGeAw6ckJ4liYzQy
Контакт для рекламы: @easyoffer_adv”
Gracias a la alta frecuencia de actualizaciones (últimos datos recibidos el 02 agosto, 2026), el canal mantiene la vigencia y un amplio alcance. La analítica demuestra que la audiencia interactúa activamente con el contenido, lo que lo convierte en un punto de referencia dentro de la categoría Tecnologías y Aplicaciones.
from django.db import models
class UserProfile(models.Model):
name = models.CharField(max_length=100)
age = models.IntegerField()
🟠Генерируем миграцию
Запускаем команду:
python manage.py makemigrations
Django создаст файл миграции в migrations/
migrations/ 0001_initial.py # Файл с SQL-изменениямиПроверяем SQL-запрос, который будет выполнен
python manage.py sqlmigrate myapp 0001
🚩Применение миграции (`migrate`)
После генерации нужно применить миграции к базе данных:
python manage.py migrate
🚩Что делать, если модель изменилась?
Добавим поле в models.py
class UserProfile(models.Model):
name = models.CharField(max_length=100)
age = models.IntegerField()
email = models.EmailField(default="example@example.com") # Добавили поле
Сгенерируем новую миграцию
python manage.py makemigrations
Применяем изменения к БД
python manage.py migrate
🚩Откат миграций (`migrate <номер>`)
Если нужно откатить последнее изменение:
python manage.py migrate myapp 0001 # Откат до первой миграции
Ставь 👍 и забирай 📚 Базу знаний__del__(). Деструктор используется для выполнения операций очистки, таких как освобождение ресурсов или выполнение завершающих действий перед тем, как объект будет удален из памяти.
🚩Определение и использование деструктора
Определяется внутри класса с помощью метода __del__().
class FileManager:
def __init__(self, filename):
self.file = open(filename, 'w')
print(f"Файл {filename} открыт для записи.")
def write_data(self, data):
self.file.write(data)
def __del__(self):
self.file.close()
print("Файл закрыт.")
🟠Класс FileManager имеет конструктор __init__(), который открывает файл для записи.
🟠Метод write_data() записывает данные в файл.
🟠Деструктор __del__() закрывает файл, когда объект FileManager уничтожается.
🚩Создание и уничтожение объекта
Когда объект класса создается, вызывается конструктор. Когда объект больше не нужен, вызывается деструктор:
manager = FileManager('example.txt')
manager.write_data('Hello, world!')
# Когда объект manager больше не нужен, вызывается деструктор и файл закрывается
🚩Важные замечания
🟠Сборка мусора
Python использует механизм сборки мусора для автоматического управления памятью. Когда объект больше не используется (например, нет активных ссылок на него), сборщик мусора удаляет объект и вызывает его деструктор.
🟠Неопределенное время вызова
Точное время вызова деструктора зависит от работы сборщика мусора. Это означает, что нельзя гарантировать момент вызова деструктора. Поэтому для критических операций лучше использовать явное управление ресурсами, например, с помощью контекстных менеджеров (with).
🟠Контекстные менеджеры
Для явного управления ресурсами и их освобождения в предсказуемый момент лучше использовать контекстные менеджеры.
with open('example.txt', 'w') as file:
file.write('Hello, world!')
# Файл автоматически закрывается после выхода из блока with
Ставь 👍 и забирай 📚 Базу знаний__iter__() и __next__().
🚩Протокол итератора
🟠Метод `__iter__()`
Этот метод должен возвращать объект-итератор. В простом случае он возвращает сам объект, если объект реализует метод __next__(). Метод __iter__() необходим для того, чтобы объект можно было использовать в конструкциях, которые требуют итерируемого объекта, таких как циклы for.
🟠Метод __next__()
Этот метод возвращает следующий элемент в последовательности. Когда элементы заканчиваются, метод должен вызвать исключение StopIteration для остановки итерации.
class MyRange:
def __init__(self, start, end):
self.start = start
self.end = end
self.current = start
def __iter__(self):
self.current = self.start # Перезапуск итератора при каждом вызове
return self
def __next__(self):
if self.current >= self.end:
raise StopIteration
else:
self.current += 1
return self.current - 1
# Использование
for number in MyRange(1, 5):
print(number)
🚩Дополнительно: итераторы и генераторы
Для упрощения создания итераторов в Python можно использовать генераторы. Генераторы позволяют писать итераторы с использованием ключевого слова yield вместо определения методов __iter__() и __next__() вручную.
def my_range(start, end):
current = start
while current < end:
yield current
current += 1
# Использование
for number in my_range(1, 5):
print(number)
Ставь 👍 и забирай 📚 Базу знанийx = "глобальная" # Global
def outer():
x = "охватывающая" # Enclosing
def inner():
x = "локальная" # Local
print(x) # Поиск начинается отсюда (L)
inner()
outer()
Вывод
локальная🚩Глобальные переменные (`global`) Если нужно изменить глобальную переменную внутри функции, используем
global
x = 10 # Глобальная переменная
def modify_global():
global x
x = 20 # Меняем глобальную переменную
modify_global()
print(x) # 20
🚩Переменные из внешней функции (`nonlocal`)
Если в вложенной функции нужно изменить переменную из enclosing-области, используем nonlocal
def outer():
x = 10 # Переменная из enclosing-области
def inner():
nonlocal x
x = 20 # Меняем `x` в `outer()`
inner()
print(x) # 20
outer()
🚩Что если переменная отсутствует во всех областях?
Если переменная не найдена в LEGB, Python выдаст NameError
def func():
print(y) # Ошибка: y не объявлена!
func()
Ошибка
NameError: name 'y' is not defined🚩`Built-in` — встроенные функции Python в последнюю очереде проверяет встроенные функции (
print(), len(), sum() и т. д.).
print = "Ошибка!" # Переопределили встроенную функцию
print("Hello") # TypeError: 'str' object is not callable
Ставь 👍 и забирай 📚 Базу знанийMerge Sort) — это алгоритм, который использует разделяй и властвуй (divide & conquer).
В худшем случае сложность O(n log n).
🚩Как работает сортировка слиянием?
🟠Делим массив пополам
до тех пор, пока не останутся отдельные элементы.
🟠Сортируем и сливаем
полученные подмассивы.
def merge_sort(arr):
if len(arr) <= 1:
return arr
mid = len(arr) // 2
left = merge_sort(arr[:mid])
right = merge_sort(arr[mid:])
return merge(left, right)
def merge(left, right):
sorted_arr = []
i = j = 0
while i < len(left) and j < len(right):
if left[i] < right[j]:
sorted_arr.append(left[i])
i += 1
else:
sorted_arr.append(right[j])
j += 1
sorted_arr.extend(left[i:])
sorted_arr.extend(right[j:])
return sorted_arr
arr = [5, 2, 9, 1, 5, 6]
print(merge_sort(arr))
Ставь 👍 и забирай 📚 Базу знаний