🤔 Что такое await?
await — ключевое слово в Python, которое приостанавливает выполнение функции, пока не завершится корутина или awaitable-объект. Оно передаёт управление event loop'у, позволяя другим задачам выполняться в это время.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
await — ключевое слово в Python, которое приостанавливает выполнение функции, пока не завершится корутина или awaitable-объект. Оно передаёт управление event loop'у, позволяя другим задачам выполняться в это время.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍1
🤔 Какие есть методы чтобы реализовать протокол итерирования данных?
Для реализации протокола итерирования данных в Python необходимо использовать два метода:
🚩Протокол итератора
🟠Метод `__iter__()`
Этот метод должен возвращать объект-итератор. В простом случае он возвращает сам объект, если объект реализует метод
🟠Метод
Этот метод возвращает следующий элемент в последовательности. Когда элементы заканчиваются, метод должен вызвать исключение
🚩Дополнительно: итераторы и генераторы
Для упрощения создания итераторов в Python можно использовать генераторы. Генераторы позволяют писать итераторы с использованием ключевого слова
Ставь 👍 и забирай 📚 Базу знаний
Для реализации протокола итерирования данных в Python необходимо использовать два метода:
__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)
Ставь 👍 и забирай 📚 Базу знаний
🤔 Что такое dunder методы?
Это специальные методы, обрамлённые двойными подчёркиваниями.
1. Пример: init, str, add.
2. Они позволяют изменять поведение встроенных операций, таких как создание объектов или арифметика.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
1. Пример: init, str, add.
2. Они позволяют изменять поведение встроенных операций, таких как создание объектов или арифметика.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍2
🤔 Что такое деструктор класса?
Это специальный метод, который вызывается автоматически, когда объект класса уничтожается. В Python этот метод называется
🚩Определение и использование деструктора
Определяется внутри класса с помощью метода
🟠Класс
🟠Метод
🟠Деструктор
🚩Создание и уничтожение объекта
Когда объект класса создается, вызывается конструктор. Когда объект больше не нужен, вызывается деструктор:
🚩Важные замечания
🟠Сборка мусора
Python использует механизм сборки мусора для автоматического управления памятью. Когда объект больше не используется (например, нет активных ссылок на него), сборщик мусора удаляет объект и вызывает его деструктор.
🟠Неопределенное время вызова
Точное время вызова деструктора зависит от работы сборщика мусора. Это означает, что нельзя гарантировать момент вызова деструктора. Поэтому для критических операций лучше использовать явное управление ресурсами, например, с помощью контекстных менеджеров (
🟠Контекстные менеджеры
Для явного управления ресурсами и их освобождения в предсказуемый момент лучше использовать контекстные менеджеры.
Ставь 👍 и забирай 📚 Базу знаний
Это специальный метод, который вызывается автоматически, когда объект класса уничтожается. В Python этот метод называется
__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Ставь 👍 и забирай 📚 Базу знаний
👍1
🤔 Что такое cls
1. cls — это ссылка на сам класс, аналог self для объектов.
2. Используется в методах класса (помеченных декоратором @classmethod ) для доступа к атрибутам или созданию новых экземпляров.
3. Пример: def create_instance(cls): return cls().
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
2. Используется в методах класса (помеченных декоратором
3. Пример: def create_instance(cls): return cls().
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍3💊1
🤔 Как сгенерировать и применить миграцию?
В Django миграции используются для изменения структуры базы данных (создание, изменение и удаление таблиц и полей).
🚩Генерация миграции (`makemigrations`)
🟠Создаём или изменяем модель (`models.py`)
Пример модели пользователя:
🟠Генерируем миграцию
Запускаем команду:
Django создаст файл миграции в
Проверяем SQL-запрос, который будет выполнен
🚩Применение миграции (`migrate`)
После генерации нужно применить миграции к базе данных:
🚩Что делать, если модель изменилась?
Добавим поле в
Сгенерируем новую миграцию
Применяем изменения к БД
🚩Откат миграций (`migrate <номер>`)
Если нужно откатить последнее изменение:
Ставь 👍 и забирай 📚 Базу знаний
В Django миграции используются для изменения структуры базы данных (создание, изменение и удаление таблиц и полей).
🚩Генерация миграции (`makemigrations`)
🟠Создаём или изменяем модель (`models.py`)
Пример модели пользователя:
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 # Откат до первой миграции
Ставь 👍 и забирай 📚 Базу знаний
🤔 Что такое set?
Это специальный метод в Python, который используется в дескрипторах. Он позволяет определить, как объект класса будет вести себя при установке значения через точку. Например, он может автоматически проверять или преобразовывать значение перед сохранением.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Это специальный метод в Python, который используется в дескрипторах. Он позволяет определить, как объект класса будет вести себя при установке значения через точку. Например, он может автоматически проверять или преобразовывать значение перед сохранением.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍2
🤔 Как избежать конфликтов при импорте файлов?
Когда в проекте много файлов, могут возникать конфликты импортов. Python ищет модули в определённом порядке, и если несколько файлов имеют одинаковые имена или неправильные пути, может возникнуть ошибка.
🚩Способы избежать конфликтов при импорте
🟠Используйте явные пути импорта
Вместо
Лучше указывать полный путь в пакетах
🟠Избегайте конфликтов имён файлов
Если у вас есть файл
- Не называйте файлы именами стандартных модулей:
- Проверьте, какой именно модуль загружается:
🟠Добавьте `__init__.py` в пакеты
Если у вас есть структура
Решение
Добавьте пустой
Теперь импорт будет работать
🟠Используйте `sys.path.append()` для указания путей
Иногда Python не находит модуль, если он находится вне стандартных путей. Решение
Добавьте путь вручную:
🟠Используйте `absolute` и `relative` импорт в пакетах
Абсолютный импорт (рекомендуется)
Относительный импорт (используется внутри пакетов):
🟠Проверяйте `sys.modules` и `sys.path`
Если импорт не работает, проверьте, какие модули загружены и где Python ищет файлы
Ставь 👍 и забирай 📚 Базу знаний
Когда в проекте много файлов, могут возникать конфликты импортов. Python ищет модули в определённом порядке, и если несколько файлов имеют одинаковые имена или неправильные пути, может возникнуть ошибка.
🚩Способы избежать конфликтов при импорте
🟠Используйте явные пути импорта
Вместо
import mymodule # Может вызвать конфликт, если есть несколько файлов с таким именем
Лучше указывать полный путь в пакетах
from myproject.utils.mymodule import my_function
🟠Избегайте конфликтов имён файлов
Если у вас есть файл
math.py, импорт import math будет загружать ваш файл, а не стандартный модуль math из Python. - Не называйте файлы именами стандартных модулей:
math.py, sys.py, json.py. - Проверьте, какой именно модуль загружается:
import math
print(math.__file__) # Путь к загруженному модулю
🟠Добавьте `__init__.py` в пакеты
Если у вас есть структура
/myproject
/utils
mymodule.py
Решение
Добавьте пустой
__init__.py в utils/: /myproject
/utils
__init__.py # Делаем utils пакетом
mymodule.py
Теперь импорт будет работать
from utils import mymodule
🟠Используйте `sys.path.append()` для указания путей
Иногда Python не находит модуль, если он находится вне стандартных путей. Решение
Добавьте путь вручную:
import sys
sys.path.append("/path/to/directory")
import mymodule # Теперь импорт будет работать
🟠Используйте `absolute` и `relative` импорт в пакетах
Абсолютный импорт (рекомендуется)
from myproject.utils.mymodule import my_function
Относительный импорт (используется внутри пакетов):
from .mymodule import my_function
🟠Проверяйте `sys.modules` и `sys.path`
Если импорт не работает, проверьте, какие модули загружены и где Python ищет файлы
import sys
print(sys.modules.keys()) # Список загруженных модулей
print(sys.path) # Пути, где Python ищет модули
Ставь 👍 и забирай 📚 Базу знаний
👍1
🤔 Что такое метаклассы?
Метаклассы в Python — это классы, создающие классы. Они являются "классами классов", которые определяют, как создается новый класс. Метаклассы позволяют вмешиваться и изменять поведение класса во время его создания, что полезно для расширенной настройки классов, например, для проверки атрибутов или автоматической регистрации классов в некотором реестре.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Что такое cookie?
Это небольшой файл, который создаётся веб-сайтом и сохраняется в браузере пользователя. Куки используются для хранения информации, связанной с пользователем, чтобы улучшить его взаимодействие с сайтом.
🚩Зачем нужны куки?
Куки помогают веб-сайтам «запоминать» данные о пользователе. Вот основные цели их использования:
🟠Аутентификация
Например, после входа в аккаунт куки сохраняют ваш статус (авторизован вы или нет).
🟠Сохранение предпочтений
Куки могут хранить ваши настройки, например, выбранный язык или тему сайта.
🟠Сессии и корзины
Если вы добавляете товары в корзину в интернет-магазине, эта информация может храниться в куки.
🟠Отслеживание действий
Куки используются для аналитики и рекламы, чтобы понять, как вы взаимодействуете с сайтом, или показать персонализированные объявления.
🚩Как работают куки?
Когда вы заходите на сайт, сервер может отправить куки вашему браузеру вместе с HTTP-ответом.
Браузер сохраняет эти данные и отправляет их обратно на сервер при последующих запросах.
Куки привязаны к домену, и только этот домен может их читать.
🚩Пример использования куки
Создание куки на сервере (Python, Flask)
🚩Типы куки
🟠Сессионные куки (Session Cookies)
Хранятся только во время работы браузера и удаляются после его закрытия.
🟠Постоянные куки (Persistent Cookies)
Сохраняются на устройстве пользователя до истечения срока действия.
🟠Безопасные куки (Secure Cookies)
Передаются только через HTTPS для обеспечения безопасности.
🟠HttpOnly куки
Не доступны через JavaScript, используются для защиты от XSS-атак.
🚩Плюсы и минусы
➕Помогают сохранять пользовательские данные для упрощения работы с сайтом.
➕Могут улучшить пользовательский опыт за счёт персонализации.
➖Могут использоваться для отслеживания активности (privacy concerns).
➖Неправильное управление куки может привести к утечкам данных.
Ставь 👍 и забирай 📚 Базу знаний
Это небольшой файл, который создаётся веб-сайтом и сохраняется в браузере пользователя. Куки используются для хранения информации, связанной с пользователем, чтобы улучшить его взаимодействие с сайтом.
🚩Зачем нужны куки?
Куки помогают веб-сайтам «запоминать» данные о пользователе. Вот основные цели их использования:
🟠Аутентификация
Например, после входа в аккаунт куки сохраняют ваш статус (авторизован вы или нет).
🟠Сохранение предпочтений
Куки могут хранить ваши настройки, например, выбранный язык или тему сайта.
🟠Сессии и корзины
Если вы добавляете товары в корзину в интернет-магазине, эта информация может храниться в куки.
🟠Отслеживание действий
Куки используются для аналитики и рекламы, чтобы понять, как вы взаимодействуете с сайтом, или показать персонализированные объявления.
🚩Как работают куки?
Когда вы заходите на сайт, сервер может отправить куки вашему браузеру вместе с HTTP-ответом.
Браузер сохраняет эти данные и отправляет их обратно на сервер при последующих запросах.
Куки привязаны к домену, и только этот домен может их читать.
🚩Пример использования куки
Создание куки на сервере (Python, Flask)
from flask import Flask, request, make_response
app = Flask(__name__)
@app.route('/set_cookie')
def set_cookie():
response = make_response("Cookie установлена!")
response.set_cookie('username', 'JohnDoe') # Устанавливаем куки с именем "username"
return response
@app.route('/get_cookie')
def get_cookie():
username = request.cookies.get('username') # Получаем значение куки
return f'Привет, {username}!' if username else 'Куки не найдены.'
if __name__ == '__main__':
app.run(debug=True)
🚩Типы куки
🟠Сессионные куки (Session Cookies)
Хранятся только во время работы браузера и удаляются после его закрытия.
🟠Постоянные куки (Persistent Cookies)
Сохраняются на устройстве пользователя до истечения срока действия.
🟠Безопасные куки (Secure Cookies)
Передаются только через HTTPS для обеспечения безопасности.
🟠HttpOnly куки
Не доступны через JavaScript, используются для защиты от XSS-атак.
🚩Плюсы и минусы
➕Помогают сохранять пользовательские данные для упрощения работы с сайтом.
➕Могут улучшить пользовательский опыт за счёт персонализации.
➖Могут использоваться для отслеживания активности (privacy concerns).
➖Неправильное управление куки может привести к утечкам данных.
Ставь 👍 и забирай 📚 Базу знаний
👍1
🤔 Что такое модель памяти Python?
Модель памяти Python основана на том, что все объекты находятся в куче, а переменные — это ссылки на эти объекты. Система управления памятью работает через подсчёт ссылок и сборщик мусора для циклов.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Модель памяти Python основана на том, что все объекты находятся в куче, а переменные — это ссылки на эти объекты. Система управления памятью работает через подсчёт ссылок и сборщик мусора для циклов.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍2
🤔 Что делает git commit?
Команда
🚩Как это работает?
Когда вы работаете с Git, ваши изменения сначала попадают в рабочую директорию. После этого, чтобы зафиксировать их, вы добавляете их в индекс (staging area) с помощью команды
🚩Почему это нужно?
🟠История изменений
Каждый коммит сохраняет подробную информацию о том, что было изменено, когда и почему. Это позволяет отслеживать развитие проекта.
🟠Версионность
Можно вернуться к любой точке в истории и восстановить состояние проекта.
🟠Совместная работа
В командной разработке коммиты позволяют другим разработчикам видеть изменения и их причины.
🟠Разделение задач
Коммиты разбивают изменения на логические единицы, что упрощает их понимание.
Ставь 👍 и забирай 📚 Базу знаний
Команда
git commit используется для фиксации изменений в локальном репозитории Git. Она сохраняет текущие изменения в коде (добавленные, изменённые или удалённые файлы), которые были подготовлены с помощью команды git add. По сути, git commit создаёт "снимок" текущего состояния проекта, который можно использовать для отслеживания истории изменений, их анализа или отката к более ранним версиям.🚩Как это работает?
Когда вы работаете с Git, ваши изменения сначала попадают в рабочую директорию. После этого, чтобы зафиксировать их, вы добавляете их в индекс (staging area) с помощью команды
git add. Только те изменения, которые находятся в индексе, будут включены в следующий коммит. Команда git commit фиксирует все изменения из staging area и сохраняет их как новую версию в истории проекта.🚩Почему это нужно?
🟠История изменений
Каждый коммит сохраняет подробную информацию о том, что было изменено, когда и почему. Это позволяет отслеживать развитие проекта.
🟠Версионность
Можно вернуться к любой точке в истории и восстановить состояние проекта.
🟠Совместная работа
В командной разработке коммиты позволяют другим разработчикам видеть изменения и их причины.
🟠Разделение задач
Коммиты разбивают изменения на логические единицы, что упрощает их понимание.
# Шаг 1. Внести изменения в файл
echo "Hello, Git!" > example.txt
# Шаг 2. Добавить изменения в staging area
git add example.txt
# Шаг 3. Зафиксировать изменения
git commit -m "Добавил файл example.txt с приветственным текстом"
Ставь 👍 и забирай 📚 Базу знаний
👍3
🤔 Что такое асинхронность?
Асинхронность в Python позволяет выполнять несколько операций одновременно, не блокируя выполнение программы. Асинхронные функции определяются с помощью ключевого слова `async`, и их выполнение управляется событиями, что делает возможным параллельное выполнение задач без использования потоков или процессов. Основные функции асинхронности включают `asyncio` и `await` для управления асинхронными операциями. Асинхронность особенно полезна для ввода-вывода и сетевых операций.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍2
🤔 Что такое хранитель (Memento)?
Это поведенческий паттерн проектирования, который позволяет сохранять и восстанавливать предыдущее состояние объекта без нарушения инкапсуляции. Этот паттерн особенно полезен для реализации операций отмены и повтора, так как он позволяет хранить состояния объектов и возвращать их к этим состояниям по необходимости.
🚩Зачем нужен?
🟠Сохранение состояния:
Позволяет сохранять текущее состояние объекта и восстанавливать его позже.
🟠Инкапсуляция:
Обеспечивает сохранение состояния объекта без нарушения его инкапсуляции. Внутренние детали объекта остаются скрытыми от других объектов.
🟠Отмена и повтор операций:
Поддерживает функциональность отмены и повтора операций, так как позволяет возвращать объект к предыдущим состояниям.
Пример реализации
1⃣`Memento`:
Сохраняет состояние объекта. Он предоставляет методы для получения сохраненного состояния, но не предоставляет методов для изменения состояния, что обеспечивает неизменность.
2⃣`TextEditor`:
Создает и использует объекты
3⃣`_save_state`:
Сохраняет текущее состояние редактора в истории перед каждым изменением.
4⃣`undo`:
Восстанавливает предыдущее состояние редактора из истории.
Ставь 👍 и забирай 📚 Базу знаний
Это поведенческий паттерн проектирования, который позволяет сохранять и восстанавливать предыдущее состояние объекта без нарушения инкапсуляции. Этот паттерн особенно полезен для реализации операций отмены и повтора, так как он позволяет хранить состояния объектов и возвращать их к этим состояниям по необходимости.
🚩Зачем нужен?
🟠Сохранение состояния:
Позволяет сохранять текущее состояние объекта и восстанавливать его позже.
🟠Инкапсуляция:
Обеспечивает сохранение состояния объекта без нарушения его инкапсуляции. Внутренние детали объекта остаются скрытыми от других объектов.
🟠Отмена и повтор операций:
Поддерживает функциональность отмены и повтора операций, так как позволяет возвращать объект к предыдущим состояниям.
Пример реализации
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`:
Восстанавливает предыдущее состояние редактора из истории.
Ставь 👍 и забирай 📚 Базу знаний
👍1
🤔 Какие типы HTTP запросов знаешь? В чем их отличия?
Типы: GET (получение данных), POST (отправка данных), PUT (обновление ресурса), DELETE (удаление ресурса), PATCH (частичное обновление). GET передаёт параметры в URL, а POST отправляет данные в теле запроса. PUT и DELETE изменяют состояние сервера, а PATCH обновляет только указанные части ресурса.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Типы: GET (получение данных), POST (отправка данных), PUT (обновление ресурса), DELETE (удаление ресурса), PATCH (частичное обновление). GET передаёт параметры в URL, а POST отправляет данные в теле запроса. PUT и DELETE изменяют состояние сервера, а PATCH обновляет только указанные части ресурса.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍3🔥1
🤔 Что быстрее python или c++?
C++ быстрее Python, потому что:
C++ — компилируемый язык, а Python — интерпретируемый.
C++ работает ближе к "железу", а Python использует абстракции.
C++ использует статическую типизацию, а Python динамическую (дополнительные проверки замедляют код).
🚩Разница в скорости выполнения
Простой пример: сложение чисел в цикле
Python (медленно)
Результат
C++ (быстро)
Результат
🚩3. Когда Python может быть быстрее?
🟠Если используются сторонние библиотеки (NumPy, Pandas, TensorFlow)
Они написаны на C/C++ и работают очень быстро. Пример:
🟠Разработка в Python быстрее (меньше кода, проще отладка)
Python код пишется в 2-5 раз быстрее, чем C++. Важно для стартапов и прототипов.
🟠Python лучше для обработки текста, веб-разработки, автоматизации
Например, парсинг HTML, обработка логов, работа с API.
🚩Когда C++ лучше?
🟠 Высокая производительность (игры, 3D, движки)
Игры, графика (
🟠Алгоритмы и математика (С++ быстрее Python в 10-100 раз)
Быстрая обработка данных, алгоритмы (
🟠Работа с железом (Embedded, драйверы, робототехника)
Python слишком медленный для реального времени, а C++ используется в Arduino, автопилотах, микроконтроллерах.
Ставь 👍 и забирай 📚 Базу знаний
C++ быстрее Python, потому что:
C++ — компилируемый язык, а Python — интерпретируемый.
C++ работает ближе к "железу", а Python использует абстракции.
C++ использует статическую типизацию, а Python динамическую (дополнительные проверки замедляют код).
🚩Разница в скорости выполнения
Простой пример: сложение чисел в цикле
Python (медленно)
import time
start = time.time()
s = 0
for i in range(10_000_000):
s += i
end = time.time()
print("Python:", end - start, "сек")
Результат
Python: 0.8 сек
C++ (быстро)
#include <iostream>
#include <chrono>
int main() {
auto start = std::chrono::high_resolution_clock::now();
long long s = 0;
for (int i = 0; i < 10000000; i++) {
s += i;
}
auto end = std::chrono::high_resolution_clock::now();
std::cout << "C++: "
<< std::chrono::duration<double>(end - start).count()
<< " сек" << std::endl;
}
Результат
C++: 0.05 сек
🚩3. Когда Python может быть быстрее?
🟠Если используются сторонние библиотеки (NumPy, Pandas, TensorFlow)
Они написаны на C/C++ и работают очень быстро. Пример:
numpy.sum(arr) быстрее, чем sum(list), потому что работает на C. 🟠Разработка в Python быстрее (меньше кода, проще отладка)
Python код пишется в 2-5 раз быстрее, чем C++. Важно для стартапов и прототипов.
🟠Python лучше для обработки текста, веб-разработки, автоматизации
Например, парсинг HTML, обработка логов, работа с API.
🚩Когда C++ лучше?
🟠 Высокая производительность (игры, 3D, движки)
Игры, графика (
Unreal Engine, Unity, CryEngine). Разработка операционных систем (Windows, Linux). 🟠Алгоритмы и математика (С++ быстрее Python в 10-100 раз)
Быстрая обработка данных, алгоритмы (
sorting, graph, machine learning). Например, если нужно перемножить матрицы размером 10 000 × 10 000, C++ справится в разы быстрее. 🟠Работа с железом (Embedded, драйверы, робототехника)
Python слишком медленный для реального времени, а C++ используется в Arduino, автопилотах, микроконтроллерах.
Ставь 👍 и забирай 📚 Базу знаний
👍2
🤔 Как распознать NP-полную задачу?
Задача NP-полная, если:
- она принадлежит классу NP (решение проверяется за полиномиальное время);
- она неизвестна как решаемая за полиномиальное время, но если бы нашлось решение для одной NP-полной задачи — решились бы и остальные;
- она сводится к другим NP-полным задачам.
Примеры: задача коммивояжёра, рюкзака, раскраски графа.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Задача NP-полная, если:
- она принадлежит классу NP (решение проверяется за полиномиальное время);
- она неизвестна как решаемая за полиномиальное время, но если бы нашлось решение для одной NP-полной задачи — решились бы и остальные;
- она сводится к другим NP-полным задачам.
Примеры: задача коммивояжёра, рюкзака, раскраски графа.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
💊1
🤔 Для чего нужны библиотеки sqlparse, asgiref в Django?
Django использует
🟠`sqlparse` – разбор SQL-запросов
🚩Где используется в Django?
Форматирование SQL-запросов в
Логирование SQL-запросов
Команда
🟠`asgiref` – асинхронность в Django
🚩Где используется в Django?
🟠Поддержка ASGI
Django с версии 3.0 поддерживает асинхронные вьюхи, WebSockets и асинхронные базы данных (например, с
В
🟠Асинхронные middleware
Django 4.x поддерживает асинхронные middleware через
🟠Преобразование `async` → `sync` и наоборот
Django использует
🟠Локальное хранилище для асинхронных задач (`asgiref.local.Local`)
Позволяет хранить данные отдельно для каждого потока или запроса.
Ставь 👍 и забирай 📚 Базу знаний
Django использует
sqlparse и asgiref как вспомогательные библиотеки для работы с SQL и асинхронностью. Разберём их назначение подробно. 🟠`sqlparse` – разбор SQL-запросов
sqlparse (SQL Parser) — это библиотека для анализа, форматирования и обработки SQL-запросов. В Django она используется в админке, логах и отладке ORM. 🚩Где используется в Django?
Форматирование SQL-запросов в
django.db.connection.queriesfrom 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.Команда
sqlmigratepython 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`)
Позволяет хранить данные отдельно для каждого потока или запроса.
Ставь 👍 и забирай 📚 Базу знаний
🤔 В каких случаях можно обработать SyntaxError?
Обычно SyntaxError возникает до запуска программы, но можно поймать его при динамическом выполнении кода через eval() или exec().
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Обычно SyntaxError возникает до запуска программы, но можно поймать его при динамическом выполнении кода через eval() или exec().
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔1