Оператор % возвращает остаток от деления одного числа на другое. Используется для проверки чётности, цикличности, деления по модулю и т.д.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Обработка исключений — это механизм в программировании, который позволяет предотвращать аварийное завершение программы, если во время выполнения возникает ошибка. Вместо того чтобы программа просто "упала", обработка исключений дает возможность перехватить ошибку и обработать её безопасным способом.
В реальном коде ошибки неизбежны:
деление на ноль (
ZeroDivisionError), обращение к несуществующему индексу (
IndexError), работа с несуществующим файлом (
FileNotFoundError) и т. д. В Python для обработки исключений используется конструкция try-except.
Обработка деления на ноль
try:
x = 10 / 0 # Ошибка: деление на ноль
except ZeroDivisionError:
print("Ошибка! Деление на ноль невозможно.")
Результат: вместо аварийного завершения программы мы получаем сообщение
Ошибка! Деление на ноль невозможно.
Обработка нескольких типов исключений
try:
num = int(input("Введите число: ")) # Возможна ошибка ValueError
result = 10 / num # Возможна ошибка ZeroDivisionError
except ZeroDivisionError:
print("Ошибка! Деление на ноль.")
except ValueError:
print("Ошибка! Введите число.")
Если пользователь введет "abc", программа не завершится с ошибкой, а выведет
Ошибка! Введите число.
Использование
finally (код, который выполняется всегда) try:
file = open("data.txt", "r") # Возможна ошибка FileNotFoundError
content = file.read()
except FileNotFoundError:
print("Файл не найден!")
finally:
print("Программа завершена.") # Выполнится в любом случае
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
GIL, или глобальная блокировка интерпретатора, предотвращает одновременное выполнение нескольких потоков в интерпретаторе Python. Это упрощает реализацию интерпретатора и защищает память от ошибок, связанных с конкурентным доступом. Таким образом, он обеспечивает безопасность при многопоточности.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Когда сервер получает HTTP-запрос типа GET, он выполняет следующие действия
проверяет URL и параметры в строке запроса (например,
?id=123). находит запрашиваемый файл, данные из базы или другой ресурс.
отправляет данные клиенту (если ресурс найден — код 200, если нет — 404).
не изменяет данные на сервере, используется только для чтения.
повторные запросы дают одинаковый результат.
данные передаются через строку запроса, что не подходит для конфиденциальной информации.
import requests
response = requests.get("https://api.example.com/data", params={"id": 123})
print(response.text) # Данные с сервера
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
yield from используется в генераторах и позволяет:
- делегировать итерацию другому генератору или итерируемому объекту;
- упрощает код вложенных генераторов;
- эффективно используется в асинхронных корутинах до Python 3.5, до появления async/await.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4💊2
Оконные функции (window functions) — это специальные функции в SQL, которые выполняют вычисления по строкам внутри "окна" (группы строк), но не агрегируют их.
SELECT
id,
месяц,
продавец,
сумма,
SUM(сумма) OVER (PARTITION BY месяц) AS общий_доход_в_месяц
FROM sales;
Пронумеруем продажи каждого продавца в порядке убывания суммы.
SELECT
id,
продавец,
сумма,
ROW_NUMBER() OVER (PARTITION BY продавец ORDER BY сумма DESC) AS номер
FROM sales;
Если два продавца получили одинаковую сумму,
RANK() пропустит следующий номер, а DENSE_RANK() – нет. SELECT
продавец,
сумма,
RANK() OVER (ORDER BY сумма DESC) AS ранг_1,
DENSE_RANK() OVER (ORDER BY сумма DESC) AS ранг_2
FROM sales;
LAG() даёт предыдущее значение, LEAD() – следующее.
SELECT
месяц,
продавец,
сумма,
LAG(сумма) OVER (PARTITION BY продавец ORDER BY месяц) AS предыдущий_месяц,
LEAD(сумма) OVER (PARTITION BY продавец ORDER BY месяц) AS следующий_месяц
FROM sales;
Иногда нужно анализировать не всю группу, а только несколько соседних строк.
SELECT
месяц,
продавец,
сумма,
AVG(сумма) OVER (PARTITION BY продавец ORDER BY месяц ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) AS скользящее_среднее
FROM sales;
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
Makefile используется для автоматизации задач: сборки программ, компиляции, тестирования, упаковки. Это особенно удобно в больших проектах, где одна команда make может запускать цепочку действий с зависимостями.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
Существует несколько видов тестов, каждый из которых имеет свою цель и особенности.
Проверка работы отдельных модулей или функций в изоляции от других частей системы.
Ориентированы на минимальные части кода (функции, методы, классы).
Высокая скорость выполнения.
Простота написания и отладки.
Обычно пишутся разработчиками.
def add(a, b):
return a + b
def test_add():
assert add(1, 2) == 3
Проверка взаимодействия между различными модулями или компонентами системы.
Тестируют комбинации модулей и их взаимодействие.
Более сложные и медленные по сравнению с юнит-тестами.
Могут выявить проблемы в интерфейсах между модулями.
def fetch_data_from_api():
response = requests.get('https://api.example.com/data')
return response.json()
def test_fetch_data_from_api():
data = fetch_data_from_api()
assert 'key' in data
Проверка всей системы целиком на соответствие требованиям.
Тестируют систему в рабочей среде.
Включают проверку всех функциональных и нефункциональных требований.
Могут включать пользовательские сценарии.
Тестирование веб-приложения на основе реальных пользовательских сценариев, включая проверку интерфейса, баз данных и API.
Проверка соответствия системы требованиям и ожиданиям заказчика или конечного пользователя.
Часто выполняются вместе с заказчиком или пользователем.
Фокусируются на бизнес-требованиях и пользовательских сценариях.
Успешное прохождение приемочных тестов является критерием готовности системы к выпуску.
Тестирование нового функционала с участием конечных пользователей для проверки его удобства и соответствия их ожиданиям.
Убедиться, что изменения в коде не вызвали новых ошибок в уже работающем функционале.
Выполняются после внесения изменений в код.
Обычно автоматизируются и включают повторное выполнение всех или части существующих тестов.
Повторное выполнение всех юнит-тестов и интеграционных тестов после рефакторинга кода.
Проверка нефункциональных аспектов системы, таких как производительность, безопасность, удобство использования и др.
Измеряют скорость выполнения, пропускную способность и время отклика системы.
Оценивают защищенность системы от угроз и атак.
Проверяют удобство и интуитивность пользовательского интерфейса.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
Обычно SyntaxError возникает до запуска программы, но можно поймать его при динамическом выполнении кода через eval() или exec().
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Циклы — это конструкции, которые позволяют многократно выполнять код, пока выполняется определённое условие.
В Python есть два типа циклов:
for — перебирает элементы последовательности (list, tuple, dict, range() и т. д.). while — выполняется, пока условие True. Простой пример
for for i in range(5):
print(i)
Вывод
0
1
2
3
4
Перебор списка
names = ["Alice", "Bob", "Charlie"]
for name in names:
print(name)
Вывод
Alice
Bob
Charlie
Перебор словаря (
dict) user = {"name": "Alice", "age": 25}
for key, value in user.items():
print(f"{key}: {value}")Вывод
name: Alice
age: 25
Пример
while x = 0
while x < 5:
print(x)
x += 1
Вывод
0
1
2
3
4
*
while с input() (бесконечный цикл) while True:
command = input("Введите команду: ")
if command == "exit":
break # Выход из цикла
print(f"Вы ввели: {command}")
break — выход из цикла for i in range(10):
if i == 5:
break # Прерывает цикл, если i == 5
print(i)
Вывод
0
1
2
3
4
continue — пропуск итерации for i in range(5):
if i == 2:
continue # Пропускаем 2
print(i)
Вывод
0
1
3
4
else выполняется, если цикл завершился без break for i in range(5):
print(i)
else:
print("Цикл завершён!")
Вывод
0
1
2
3
4
Цикл завершён!
Но если сработает
break, else не выполняется for i in range(5):
if i == 3:
break
print(i)
else:
print("Цикл завершён!") # Не выполнится!
Вывод
0
1
2
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
REST (Representational State Transfer) — это архитектурный стиль, используемый при разработке API.
Он основывается на принципах HTTP и работе с ресурсами, которые доступны по URL.
Каждый запрос клиента должен быть самодостаточным (stateless), а взаимодействие строится с использованием стандартных HTTP-методов.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1🔥1