Python | Вопросы собесов
Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @sendme_ads
نمایش بیشتر📈 تحلیل کانال تلگرام Python | Вопросы собесов
کانال Python | Вопросы собесов (@python_easy_ru) در بخش زبانی روسی بازیگری فعال است. در حال حاضر جامعه شامل 12 645 مشترک است و جایگاه 9 797 را در دسته فناوری و برنامهها و رتبه 50 916 را در منطقه روسيا دارد.
📊 شاخصهای مخاطب و پویایی
از زمان ایجاد در невідомо، پروژه رشد سریعی داشته و 12 645 مشترک جذب کرده است.
بر اساس آخرین دادهها در تاریخ 11 اکتبر, 2026، کانال فعالیت پایداری دارد. در ۳۰ روز گذشته تغییر اعضا برابر -90 و در ۲۴ ساعت گذشته برابر 0 بوده و همچنان دسترسی گستردهای حفظ شده است.
- وضعیت تأیید: تأیید نشده
- نرخ تعامل (ER): میانگین تعامل مخاطب 6.14% است و در ۲۴ ساعت نخست پس از انتشار، محتوا معمولاً 4.15% واکنش نسبت به کل مشترکان کسب میکند.
- دسترسی پستها: هر پست به طور میانگین 777 بازدید دریافت میکند. در اولین روز معمولاً 526 بازدید جمعآوری میشود.
- واکنشها و تعامل: مخاطبان بهطور فعال حمایت میکنند؛ میانگین واکنش به هر پست 2 است.
- علایق موضوعی: محتوا بر موضوعات کلیدی مانند ставь, модуль, строка, docker, alice تمرکز دارد.
📝 توضیح و سیاست محتوایی
نویسنده این فضا را محل بیان دیدگاههای شخصی توصیف میکند:
“Сайт: https://easyoffer.ru/
Все каналы: t.me/+xGeAw6ckJ4liYzQy
Контакт для рекламы: @sendme_ads”
به لطف بهروزرسانیهای پرتکرار (آخرین داده در تاریخ 12 اکتبر, 2026)، کانال همواره بهروز و دارای دسترسی بالاست. تحلیلها نشان میدهد مخاطبان بهطور فعال با محتوا تعامل دارند و آن را به نقطه اثرگذاری مهم در دسته فناوری و برنامهها تبدیل کردهاند.
sqlparse и asgiref как вспомогательные библиотеки для работы с SQL и асинхронностью. Разберём их назначение подробно.
🟠`sqlparse` – разбор SQL-запросов
sqlparse (SQL Parser) — это библиотека для анализа, форматирования и обработки SQL-запросов. В Django она используется в админке, логах и отладке ORM.
🚩Где используется в Django?
Форматирование SQL-запросов в django.db.connection.queries
from django.db import connection
from sqlparse import format
queries = connection.queries # Получаем список SQL-запросов
for q in queries:
print(format(q["sql"], reindent=True, keyword_case="upper")) # Красивый SQL
Логирование SQL-запросов
sqlparse помогает Django красиво выводить SQL-запросы в DEBUG=True.
Команда sqlmigrate
python manage.py sqlmigrate app_name 0001
🟠`asgiref` – асинхронность в Django
asgiref (Asynchronous Server Gateway Interface Reference) — это библиотека, которая помогает Django работать в асинхронном (async) режиме. Django поддерживает ASGI с версии 3.0, и asgiref — это её обязательная зависимость.
🚩Где используется в Django?
🟠Поддержка ASGI
Django с версии 3.0 поддерживает асинхронные вьюхи, WebSockets и асинхронные базы данных (например, с asyncpg).
В settings.py есть параметр:
ASGI_APPLICATION = "myproject.asgi.application"
🟠Асинхронные middleware
Django 4.x поддерживает асинхронные middleware через asgiref.sync и asgiref.local.
🟠Преобразование `async` → `sync` и наоборот
Django использует sync_to_async() и async_to_sync() из asgiref:
from asgiref.sync import sync_to_async
def sync_function():
return "Hello from sync!"
async_function = sync_to_async(sync_function)
print(async_function()) # Вызывает синхронную функцию в асинхронном коде
🟠Локальное хранилище для асинхронных задач (`asgiref.local.Local`)
Позволяет хранить данные отдельно для каждого потока или запроса.
Ставь 👍 и забирай 📚 Базу знанийclass Memento:
def __init__(self, state: str):
self._state = state
def get_state(self) -> str:
return self._state
class TextEditor:
def __init__(self):
self._state = ""
self._history = []
def type(self, text: str):
self._save_state()
self._state += text
def _save_state(self):
self._history.append(Memento(self._state))
def undo(self):
if not self._history:
return
memento = self._history.pop()
self._state = memento.get_state()
def get_content(self) -> str:
return self._state
# Клиентский код для использования паттерна Хранитель
def main():
editor = TextEditor()
editor.type("Hello, ")
editor.type("world!")
print(editor.get_content()) # Hello, world!
editor.undo()
print(editor.get_content()) # Hello,
editor.undo()
print(editor.get_content()) #
if __name__ == "__main__":
main()
1⃣`Memento`:
Сохраняет состояние объекта. Он предоставляет методы для получения сохраненного состояния, но не предоставляет методов для изменения состояния, что обеспечивает неизменность.
2⃣`TextEditor`:
Создает и использует объекты Memento для сохранения и восстановления своего состояния. Методы type и undo позволяют редактировать текст и отменять изменения.
3⃣`_save_state`:
Сохраняет текущее состояние редактора в истории перед каждым изменением.
4⃣`undo`:
Восстанавливает предыдущее состояние редактора из истории.
Ставь 👍 и забирай 📚 Базу знаний__init__.py).
mypackage/ │── mymodule.py │── __init__.py └── utils.py🚩Как создать свой пакет? Допустим, у нас есть пакет
mypackage, в котором есть функция say_hello().
Структура проекта
mypackage/ │── mymodule.py │── __init__.py └── setup.pyФайл
mypackage/mymodule.py
def say_hello():
return "Привет, мир!"
Файл mypackage/__init__.py (он делает папку пакетом)
from .mymodule import say_hello
Теперь можно использовать mypackage в коде
import mypackage
print(mypackage.say_hello()) # Выведет: Привет, мир!
🚩Как установить стороннюю библиотеку?
Чтобы установить готовую библиотеку из PyPI, используем pip
pip install requests # Установка библиотеки requests
Чтобы посмотреть установленные пакеты
pip list
Чтобы удалить пакет
pip uninstall requests
Чтобы обновить пакет
pip install requests --upgrade
Ставь 👍 и забирай 📚 Базу знанийGET https://api.example.com/users/123Использование стандартных HTTP-методов: GET — для получения данных. POST — для создания новых данных. PUT или PATCH — для обновления данных. DELETE — для удаления данных. Ресурсы как представления: Ресурсы передаются в формате JSON, XML или другом формате. 🟠Кэширование Ответы сервера могут быть кэшируемыми. Это уменьшает нагрузку на сервер и ускоряет работу клиента. 🟠Единообразие и слои RESTful системы могут включать несколько слоев (например, балансировщики нагрузки, кеш-сервисы), но клиент взаимодействует только с сервером, не зная о внутренних слоях. 🟠Код по требованию (опционально) Иногда сервер может передавать исполняемый код (например, JavaScript) клиенту, чтобы расширить его функциональность. Это не обязательно. 🚩Почему RESTful важен? RESTful архитектура позволяет: 🟠Сделать API простым и понятным Клиенты легко понимают, как обращаться к ресурсам (используя стандартные методы и адреса). 🟠Обеспечить гибкость Клиенты и серверы могут развиваться независимо друг от друга. 🟠Поддерживать масштабируемость RESTful API легко масштабируются, так как все запросы независимы друг от друга (статичность). 🟠Облегчить интеграцию RESTful API поддерживают стандартизированные протоколы (HTTP), что делает интеграцию с другими сервисами проще. Ставь 👍 и забирай 📚 Базу знаний
x = 10
print(id(x)) # 140735598722544 (адрес в памяти)
x = x + 5 # Создаётся новый объект!
print(id(x)) # 140735598722704 (новый адрес)
Пример: str неизменяемая
s = "hello"
print(id(s)) # 140735598723664
s = s + " world" # Создаётся новая строка!
print(id(s)) # 140735598724240 (новый адрес)
🚩Изменяемые (`mutable`) типы
Можно менять их содержимое без создания нового объекта.
lst = [1, 2, 3]
print(id(lst)) # 140735598722544
lst.append(4) # Изменяем список
print(id(lst)) # 140735598722544 (адрес остался тот же!)
Пример: dict изменяемый
d = {"name": "Alice"}
print(id(d)) # 140735598723664
d["age"] = 25 # Добавляем ключ
print(id(d)) # 140735598723664 (адрес не изменился!)
🚩Почему это важно?
Неизменяемые объекты безопаснее для ключей dict и set
d = {}
d[[1, 2, 3]] = "Ошибка!" # ❌ TypeError: unhashable type: 'list'
Используем tuple вместо list (он неизменяемый)
d[(1, 2, 3)] = "OK"
Ошибки с изменяемыми значениями по умолчанию
def add_item(lst=[]): # ❌ Опасный код!
lst.append(1)
return lst
print(add_item()) # [1]
print(add_item()) # [1, 1] ❌ Список не создаётся заново!
Используем None вместо списка
def add_item(lst=None):
if lst is None:
lst = []
lst.append(1)
return lst
🚩Копирование объектов (`copy()` vs `deepcopy()`)
copy() делает поверхностную копию (новый объект, но старые вложенные элементы).
deepcopy() делает глубокую копию (всё новое).
import copy
lst1 = [[1, 2, 3], [4, 5, 6]]
lst2 = copy.copy(lst1) # Поверхностная копия
lst2[0][0] = 99
print(lst1) # [[99, 2, 3], [4, 5, 6]] ❌ Исходный список изменился!
Используем deepcopy() для полной независимой копии
lst3 = copy.deepcopy(lst1)
lst3[0][0] = 100
print(lst1) # [[99, 2, 3], [4, 5, 6]] ✅ Не изменился!
Ставь 👍 и забирай 📚 Базу знанийGunicorn, Daphne).
Если проект синхронный → работает через WSGI (wsgi.py).
Если проект асинхронный → через ASGI (asgi.py).
GET /hello/ HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0
🟠Django создаёт `HttpRequest` объект
Django превращает HTTP-запрос в объект HttpRequest, который передаётся в view.
def my_view(request):
print(request.method) # 'GET'
print(request.path) # '/hello/'
print(request.GET) # {'name': 'Alice'}
🟠Middleware (промежуточная обработка)
Прежде чем запрос дойдёт до view, Django проходит через мидлвари, которые могут:
Проверять авторизацию (AuthenticationMiddleware).
Защищать от CSRF (CsrfViewMiddleware).
Перенаправлять запросы (CommonMiddleware).
MIDDLEWARE = [
"django.middleware.security.SecurityMiddleware",
"django.middleware.common.CommonMiddleware",
"django.middleware.csrf.CsrfViewMiddleware",
"django.contrib.sessions.middleware.SessionMiddleware",
"django.contrib.auth.middleware.AuthenticationMiddleware",
]
🟠Поиск `view` в `urls.py`
Django ищет, какая функция (view) должна обработать этот URL.
from django.urls import path
from myapp.views import hello_view
urlpatterns = [
path("hello/", hello_view), # Запрос "/hello/" попадёт в hello_view
]
🟠Выполнение `view` (контроллера)
Когда Django находит подходящее представление (view), оно вызывается.
from django.http import HttpResponse
def hello_view(request):
return HttpResponse("Привет, мир!")
🟠Формирование и обработка ответа
Django берёт HttpResponse и передаёт его обратно через middleware (например, сжатие, защита, заголовки безопасности).
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 12
Привет, мир!
🟠WSGI/ASGI сервер отправляет ответ клиенту
На последнем этапе WSGI/ASGI-сервер отправляет ответ обратно браузеру или API-клиенту.
🚩Краткая схема обработки запроса
Клиент (браузер) → WSGI/ASGI → Django Middleware → URL Dispatcher → View → Response → КлиентСтавь 👍 и забирай 📚 Базу знаний
