и посмотреть медиа
Preguntas de la entrevista de Python - pruebas
и посмотреть медиа
Preguntas, pruebas y tareas para entrevistas en Python.
Preguntas, pruebas y tareas para entrevistas en Python.
bot de IA para clonar texto a voz y voz en Telegram. Cree audio utilizando la red neuronal de forma rápida y fácil.
Canal con preguntas para entrevistas a Python. Pruebas, tareas y materiales para la preparación.
🤔 Что делать если нужно перехватить исключение, выполнить действия и опять возбудить это же исключение? Если нужно: Перехватить исключение Выполнить какие-то действия (лог, очистка, уведомление и т. д.) Снова выбросить это же исключение try: x = 1 / 0 # Ошибка деления на ноль except ZeroDivisionError: print("Ошибка! Записываем в лог...") raise # Повторно выбрасываем то же исключение Вывод Ошибка! Записываем в лог... Traceback (most recent call last): File "script.py", line 2, in 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() # Гарантированно закроет файл Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Какие магические методы и для чего используются? Магические методы (например, __init__, __str__, __len__, __add__) используются для определения поведения объектов в специфичных ситуациях, таких как инициализация, строковое представление, арифметические операции или работа с коллекциями. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Почему вычислять большие значения в асинхронной функции плохо? Асинхронность (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 = ["Ссылка скрыта * 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()) Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Что случится с сервером при использовании GET? Когда сервер получает HTTP-запрос типа GET, он выполняет следующие действия 🟠Анализ запроса проверяет URL и параметры в строке запроса (например, ?id=123). 🟠Поиск ресурса находит запрашиваемый файл, данные из базы или другой ресурс. 🟠Возврат ответа отправляет данные клиенту (если ресурс найден — код 200, если нет — 404). 🚩Особенности GET-запроса 🟠Безопасный не изменяет данные на сервере, используется только для чтения. 🟠Идемпотентный повторные запросы дают одинаковый результат. 🟠Параметры в URL данные передаются через строку запроса, что не подходит для конфиденциальной информации. import requests response = requests.get("Ссылка скрыта params={"id": 123}) print(response.text) # Данные с сервера Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Как собрать образ в Docker? Образ собирается из Dockerfile при помощи команды сборки. В процессе выполнения создаются слои, соответствующие каждой инструкции в Dockerfile. По завершении формируется итоговый образ, который можно запускать как контейнер. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Какие есть операторы ограничений? Ограничения (constraints) в SQL используются для контроля целостности данных в таблицах. Они помогают предотвратить некорректные значения и обеспечить согласованность данных. 🚩`NOT NULL` (Запрещает `NULL`) Используется, если поле обязательно для заполнения CREATE TABLE users ( id INT PRIMARY KEY, name VARCHAR(50) NOT NULL -- Поле name обязательно ); Нельзя вставить NULL в name INSERT INTO users (id, name) VALUES (1, NULL); -- Ошибка! 🚩`UNIQUE` (Гарантирует уникальность значений) Запрещает дубликаты в столбце CREATE TABLE users ( id INT PRIMARY KEY, email VARCHAR(100) UNIQUE -- Email должен быть уникальным ); Попытка вставить одинаковый email вызовет ошибку INSERT INTO users (id, email) VALUES (1, '[email protected]'); INSERT INTO users (id, email) VALUES (2, '[email protected]'); -- Ошибка! Создание UNIQUE на нескольких колонках CREATE TABLE orders ( user_id INT, product_id INT, UNIQUE (user_id, product_id) -- Запрещает заказывать один товар дважды ); 🚩`PRIMARY KEY` (Главный ключ, уникальный идентификатор) Объединяет NOT NULL + UNIQUE и гарантирует, что строка уникальна. CREATE TABLE users ( id INT PRIMARY KEY, -- Уникальный идентификатор name VARCHAR(50) ); Можно создать PRIMARY KEY на нескольких колонках CREATE TABLE enrollments ( student_id INT, course_id INT, PRIMARY KEY (student_id, course_id) -- Один студент не может записаться дважды на один курс ); 🚩`FOREIGN KEY` (Связь таблиц) Создаёт связь между таблицами и поддерживает ссылочную целостность. Есть таблица пользователей (users) и таблица заказов (orders), где user_id в orders должен ссылаться на id в users. CREATE TABLE users ( id INT PRIMARY KEY, name VARCHAR(50) ); CREATE TABLE orders ( id INT PRIMARY KEY, user_id INT, FOREIGN KEY (user_id) REFERENCES users(id) -- Связь с таблицей users ); Что делать при удалении пользователя? FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Какие ограничения есть у рекурсии в Python? Рекурсия — это мощный инструмент, но в Python она имеет ограничения, которые нужно учитывать при написании кода. 🟠Ограничение на глубину рекурсии (`sys.getrecursionlimit()`) В Python по умолчанию рекурсия ограничена 1000 вызовами, чтобы избежать переполнения стека. import sys print(sys.getrecursionlimit()) # 1000 (обычное значение) Если превысить этот лимит, программа вызовет ошибку def recursive(): return recursive() recursive() # RecursionError: maximum recursion depth exceeded 🚩Как изменить лимит? Можно увеличить глубину рекурсии, но это небезопасно sys.setrecursionlimit(2000) # Увеличиваем до 2000 🟠Рекурсия требует много памяти Каждый рекурсивный вызов создаёт новый фрейм в стеке вызовов. def factorial(n): if n == 1: return 1 return n * factorial(n - 1) print(factorial(10000)) # Ошибка из-за переполнения стека 🟠Отсутствие оптимизации хвостовой рекурсии Другие языки (например, Lisp, JavaScript) автоматически оптимизируют хвостовую рекурсию (Tail Call Optimization, TCO). Python не делает этого, поэтому даже "идеальная" рекурсия всё равно переполняет стек. def tail_recursive(n, acc=1): if n == 1: return acc return tail_recursive(n - 1, n * acc) print(tail_recursive(1000)) # Всё равно вызовет RecursionError 🟠Рекурсия медленнее цикла Рекурсивный вызов требует больше накладных расходов (создание стек-фреймов), чем обычный for или while. # Итеративный вариант (быстрее) def factorial_iter(n): result = 1 for i in range(1, n + 1): result *= i return result # Рекурсивный вариант (медленнее) def factorial_rec(n): if n == 1: return 1 return n * factorial_rec(n - 1) Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Что такое звёздный синтаксис (*)? В Python * используется: – при распаковке (например, аргументов или списков), – для переменного числа аргументов функции, – в срезах и других операциях с коллекциями. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Можно ли при вызове метода save указать какие поля изменять? Да, в Django ORM можно указать конкретные поля для сохранения, используя параметр update_fields в методе .save(). 🚩Как использовать `update_fields` Пример модели from django.db import models class UserProfile(models.Model): name = models.CharField(max_length=100) email = models.EmailField() age = models.IntegerField() Обновляем только поле name, не трогая email и age user = UserProfile.objects.get(id=1) user.name = "Новый пользователь" user.save(update_fields=["name"]) # Обновит только поле `name` 🚩Что делает `update_fields`? Генерирует SQL-запрос только для указанных полей, например: UPDATE user_profile SET name = 'Новый пользователь' WHERE id = 1; 🚩Когда `update_fields` полезен? Уменьшает нагрузку на БД, так как обновляет только нужные поля. Полезен, если нужно изменить одно поле, а не всю запись. Избегает ненужных изменений в auto_now и auto_now_add полях (DateTimeField). 🚩Ограничения `update_fields` Нельзя использовать при создании объекта (save() с update_fields не работает для .create()). user = UserProfile(name="Alice", email="[email protected]") user.save(update_fields=["name"]) # ❌ Ошибка, объект ещё не в базе! Не обновляет auto_now-поля (DateTimeField) автоматически! updated_at = models.DateTimeField(auto_now=True) # Не обновится с `update_fields` Решение: обновить вручную: user.updated_at = timezone.now() user.save(update_fields=["name", "updated_at"]) Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиаSolo los usuarios registrados pueden compartir su opinión.
¡Sé el primero en compartir tu experiencia con este recurso!