Ключем в словаре (dict) в Python может быть любой неизменяемый тип данных, такой как строки, числа, кортежи или булевы значения. Ключи должны быть уникальными, так как они используются для быстрой индексации и поиска значений в словаре. Попытка использования изменяемого объекта, такого как список или словарь, в качестве ключа вызовет ошибку. Ключи словаря должны быть хешируемыми, чтобы поддерживать эффективный поиск.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6💊3🔥1
filter()
— это встроенная функция Python, которая отбирает элементы из последовательности по заданному условию. filter(function, iterable)
Пример 1: Фильтрация чётных чисел
numbers = [1, 2, 3, 4, 5, 6]
# Оставляем только чётные числа
even_numbers = filter(lambda x: x % 2 == 0, numbers)
print(list(even_numbers)) # [2, 4, 6]
Пример 2: Фильтрация строк по длине
words = ["apple", "kiwi", "banana", "cherry"]
# Оставляем только слова длиной больше 5 символов
long_words = filter(lambda word: len(word) > 5, words)
print(list(long_words)) # ['banana', 'cherry']
Пример 3: Фильтрация
None
и пустых значений values = [None, 0, "", "hello", 42, [], {}]
# Оставляем только "истинные" значения
filtered_values = filter(None, values)
print(list(filtered_values)) # ['hello', 42]
Пример 4: Использование
filter()
с def
def is_positive(n):
return n > 0
numbers = [-5, -2, 0, 3, 7, -1]
positive_numbers = filter(is_positive, numbers)
print(list(positive_numbers)) # [3, 7]
Более короткий и читаемый код
# С `filter()`
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
# С `for` + `if`
even_numbers = [x for x in numbers if x % 2 == 0]
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👍3💊2
1. Пример: init, str, add.
2. Они позволяют изменять поведение встроенных операций, таких как создание объектов или арифметика.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11👍5
В Python можно проверять наличие ключа или значения в словаре разными способами.
Самый быстрый и правильный способ — проверять ключи (
keys
), так как доступ к ним O(1).data = {"name": "Alice", "age": 25, "city": "New York"}
# Проверяем, есть ли ключ "age"
if "age" in data:
print("Ключ найден!")
Вывод
Ключ найден!
Не надо проверять так
if data.get("age") is not None: # ❌ Работает, но `in` быстрее
Если нужно проверить значение, используем
values()
if 25 in data.values():
print("Значение найдено!")
Вывод
Значение найдено!
Если нужно проверить пару (ключ, значение)
if ("age", 25) in data.items():
print("Пара (ключ, значение) найдена!")
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20💊1
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥2
Пакет (
package
) в Python — это набор модулей, объединённых в одну директорию. Главное отличие от обычной папки — наличие файла __init__.py
, который делает директорию пакетом. Допустим, мы хотим создать пакет
math_utils
с модулями для работы с числами. /my_project
/math_utils ← Это пакет
__init__.py ← Делаем директорию пакетом
arithmetic.py ← Модуль с функциями сложения/вычитания
geometry.py ← Модуль с функциями для работы с фигурами
main.py ← Основной файл программы
Код в
arithmetic.py
def add(a, b):
return a + b
def subtract(a, b):
return a - b
Код в
geometry.py
def square_area(side):
return side * side
Код в
__init__.py
from .arithmetic import add, subtract
from .geometry import square_area
Теперь можно импортировать функции прямо из пакета:
from math_utils import add, square_area
print(add(2, 3)) # 5
print(square_area(4)) # 16
Импортируем весь пакет (с
__init__.py
) from math_utils import add, square_area
Импортируем конкретный модуль
from math_utils import arithmetic
print(arithmetic.add(3, 5))
Импортируем конкретную функцию из модуля
from math_utils.arithmetic import add
print(add(3, 5))
Python ищет пакеты по
sys.path
import sys
print(sys.path) # Пути, где Python ищет модули
Если Python не находит пакет, можно добавить путь вручную:
import sys
sys.path.append("/path/to/my_project")
Можно создавать вложенные пакеты
/my_project
/math_utils
__init__.py
/advanced
__init__.py
calculus.py
Импорт:
from math_utils.advanced.calculus import derivative
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14💊2❤1🔥1
Типы: GET (получение данных), POST (отправка данных), PUT (обновление ресурса), DELETE (удаление ресурса), PATCH (частичное обновление). GET передаёт параметры в URL, а POST отправляет данные в теле запроса. PUT и DELETE изменяют состояние сервера, а PATCH обновляет только указанные части ресурса.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥5❤2
В SQL можно объединять данные из двух таблиц без использования
JOIN
, используя альтернативные методы. Подзапрос (
subquery
) позволяет выбрать данные из одной таблицы, используя данные из другой. Допустим, у нас есть две таблицы:
employees (id, name, department_id)
departments (id, name)
SELECT name,
(SELECT name FROM departments WHERE id = employees.department_id) AS department_name
FROM employees;
Можно фильтровать данные из одной таблицы, проверяя наличие значений в другой.
SELECT name
FROM employees
WHERE department_id IN (SELECT id FROM departments);
Если таблицы имеют схожие колонки, можно объединить их с
UNION
. SELECT id, name, email FROM users_old
UNION
SELECT id, name, email FROM users_new;
Хотя
CROSS JOIN
делает декартово произведение, его можно фильтровать WHERE
, имитируя INNER JOIN
. SELECT e.name, d.name AS department
FROM employees e, departments d
WHERE e.department_id = d.id;
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Forwarded from Идущий к IT
Привет ребята, мне на easyoffer.ru нужен:
🐍 Middle/Senior Python Developer
Стек:
DRF, PostgreSQL, Redis, Celery, Docker, Sentry
Задачи:
🟠 Разработка и поддержка REST API для новых фичей
🟠 Интеграция с веб-сервисами и внешними API
🟠 Подключение и поддержка платежных систем
🟠 Написание юнит- и интеграционных тестов
🟠 Оптимизация производительности и масштабирование
🟠 Взаимодействие с ML-моделями — будет плюсом
Ожидания:
🟠 2+ лет опыта DRF
🟠 Опыт интеграций платежных систем
🟠 Опыт работы с PostgreSQL, Celery, Redis, Docker
🟠 Умение проектировать архитектуру REST-API
🟠 Ответственный подход к качеству кода и тестированию
Опыт в стартапах и небольших командах будет плюсом
Условия:
– Частичная занятость (2-3 часа в день)
– Удаленная работа
– Свободный график
– Почасовая оплата
✈ Если вас заинтересовала вакансия, напишите мне @kivaiko
1. Резюме
2. Ссылку на github
3. Комфортную ставку за час
🐍 Middle/Senior Python Developer
Стек:
DRF, PostgreSQL, Redis, Celery, Docker, Sentry
Задачи:
Ожидания:
Опыт в стартапах и небольших командах будет плюсом
Условия:
– Частичная занятость (2-3 часа в день)
– Удаленная работа
– Свободный график
– Почасовая оплата
1. Резюме
2. Ссылку на github
3. Комфортную ставку за час
Please open Telegram to view this post
VIEW IN TELEGRAM
💊2
Схема (schema) в базе данных — это логическая группировка объектов (таблиц, индексов, представлений и т. д.) внутри одной БД.
Схема — это контейнер для объектов БД (таблиц, индексов, процедур).
База данных (company_db)
├── Схема: public (по умолчанию)
│ ├── Таблица: employees
│ ├── Таблица: departments
├── Схема: hr
│ ├── Таблица: employees
│ ├── Таблица: salaries
├── Схема: sales
│ ├── Таблица: customers
│ ├── Таблица: orders
Создание схемы (
CREATE SCHEMA
) CREATE SCHEMA hr; -- Создаём схему "hr"
Создание таблицы внутри схемы
CREATE TABLE hr.employees (
id SERIAL PRIMARY KEY,
name VARCHAR(100),
position VARCHAR(50)
);
Выбор схемы по умолчанию
SET search_path TO hr;
Если в БД хранятся разные области бизнеса (кадры, продажи, финансы), их можно разделить по схемам:
-
hr.employees
, hr.salaries
-
sales.orders
, sales.customers
Например, в PostgreSQL можно создать схему
dev
для тестов: -
dev.users
— тестовая версия таблицы -
prod.users
— продакшен-версия Можно дать доступ к разным схемам разным пользователям:
GRANT USAGE ON SCHEMA hr TO hr_manager;
GRANT SELECT ON ALL TABLES IN SCHEMA hr TO hr_manager;
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9💊1
- PUT — идемпотентный: повторный вызов приводит к одному и тому же состоянию ресурса.
- PATCH — условно идемпотентный, если изменения одинаковы.
- POST — не идемпотентный, каждый запрос может создать новый объект или изменить данные.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🔥7❤1💊1
Пузырьковая сортировка (Bubble Sort) — это один из самых простых, но неэффективных алгоритмов сортировки.
1. Проходим по массиву несколько раз.
2. На каждой итерации сравниваем соседние элементы и меняем их местами, если они идут не в том порядке.
3. После первого прохода наибольший элемент оказывается в конце массива.
4. Повторяем процесс, пока массив не отсортируется.
Количество сравнений в худшем случае:
- На первой итерации:
n-1
сравнений - На второй:
n-2
сравнений - На третьей:
n-3
сравнений - …
- Всего:
(n-1) + (n-2) + ... + 1 = O(n²)
Количество обменов (swap) в худшем случае:
- Если массив полностью перевёрнут, на каждой итерации будет максимальное количество перестановок →
O(n²)
. Если на проходе по массиву не было перестановок, значит массив уже отсортирован.
def bubble_sort(arr):
n = len(arr)
for i in range(n):
swapped = False # Флаг, отслеживающий перестановки
for j in range(n - i - 1):
if arr[j] > arr[j + 1]: # Если элементы в неправильном порядке, меняем местами
arr[j], arr[j + 1] = arr[j + 1], arr[j]
swapped = True
if not swapped:
break # Если перестановок не было, завершаем сортировку
arr = [1, 2, 3, 4, 5] # Уже отсортированный массив
bubble_sort(arr)
print(arr) # [1, 2, 3, 4, 5]
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤2
Согласно правилу LEGB:
- Локальная (внутри текущей функции).
- Замыкающая (внутри внешней функции, если функция вложена).
- Глобальная (на уровне модуля).
- Встроенная (встроенные функции и константы вроде print, len, None).
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥17👍8❤1
В Python список (
list
) — это массив указателей. Элементы списка не хранятся внутри него, а находятся в других местах памяти, а сам список содержит ссылки (указатели) на них. Допустим, у нас есть список:
my_list = [10, "hello", 3.14, [1, 2, 3]]
+-----------------+
| Указатель → 10 | (int)
| Указатель → "hello" | (str)
| Указатель → 3.14 | (float)
| Указатель → [1, 2, 3] | (list)
+-----------------+
Мы можем увидеть размер пустого списка и списка с элементами с помощью
sys.getsizeof()
:import sys
empty_list = []
print(sys.getsizeof(empty_list)) # 56 байт (сам список)
filled_list = [10, "hello", 3.14, [1, 2, 3]]
print(sys.getsizeof(filled_list)) # 88 байт (список + 4 указателя)
Каждая ячейка списка занимает фиксированное количество памяти, равное размеру указателя (8 байт на 64-битной системе).
import ctypes
my_list = [10, "hello", 3.14, [1, 2, 3]]
for i in range(len(my_list)):
print(ctypes.cast(id(my_list[i]), ctypes.py_object).value)
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14
Ключевое слово global используется для объявления переменной глобальной внутри функции. Без него любое присваивание переменной внутри функции создаёт новую локальную переменную. Если нужно изменить переменную, определённую вне функции — следует явно указать global.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14💊8
Для создания и управления виртуальными окружениями существует несколько инструментов. Вот некоторые из наиболее распространенных:
Это один из самых популярных инструментов для создания виртуальных окружений. Он позволяет создавать изолированные среды, в которых можно устанавливать и использовать зависимости для конкретных проектов.
Это встроенный инструмент для создания виртуальных окружений, доступный начиная с Python 3.3. Он предоставляет функциональность, аналогичную virtualenv, но является частью стандартной библиотеки.
Это инструмент для управления зависимостями и виртуальными окружениями. Он комбинирует возможности управления зависимостями с помощью
pip
и создания виртуальных окружений с помощью virtualenv
или venv
. Pipenv также автоматически создает и активирует виртуальное окружение для каждого проекта.Это современный инструмент для управления зависимостями и виртуальными окружениями. Он предоставляет возможности для управления зависимостями, создания виртуальных окружений, управления сценариями (scripts) и публикации пакетов. Poetry использует файл pyproject.toml для определения зависимостей и настроек проекта.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8😁2
Forwarded from easyoffer
Я боялся, что провалю собеседование. Так появился easyoffer
Когда я только начинал искать первую работу программистом, меня пугала мысль, что я просто не смогу ответить на вопросы на собеседовании.
Типа… ты потратил месяцы на то, чтобы учиться, писал pet-проекты, собирал резюме, рассылаешь отклики — и всё может закончиться на одном-единственном вопросе, на который ты не знаешь ответ.
Я реально боялся.
Я смотрел видео mock-собеседований на YouTube, останавливал каждое, выписывал вопросы в Notion. Потом вручную писал к ним ответы. И потом ещё по нескольку раз перечитывал. Такой вот "тренажёр" на коленке.
📎 (там на картинке — один из моих реальных списков в Notion, ставь 🔥 если тоже так делал)
В какой-то момент я посчитал — у меня уже было выписано больше 500 вопросов. Я почувствовал ужас.
Потому что невозможно всё это зазубрить. А что, если спросят как раз тот, к которому я не успел подготовиться?..
Тогда и пришла идея
А что если понять, какие из вопросов встречаются чаще всего? Чтобы не учить всё подряд, а сфокусироваться на главном.
Так родился easyoffer.
Сначала — просто как пет-проект, чтобы показать в резюме и подготовиться к собесам. А потом оказалось, что он реально помогает людям. За первые месяцы его посетили сотни тысяч человек. И я понял: это больше, чем просто пет-проект.
Сейчас я делаю EasyOffer 2.0
И уже не один, а вместе с вами.
В новой версии будут:
– вопросы из реальных собесов, с фильтрацией по грейду, компании, типу интервью
– тренажёр с карточками (по принципу интервальных повторений — как в Anki)
– база задач с интервью
– тренажёр «реальное собеседование», чтобы отрепетировать как в жизни
Каждая фича упрощает и сокращает время на подготовку. Все эти штуки я бы мечтал иметь, когда сам готовился к собеседованиям.
Я делаю всё на свои деньги. Никаких инвесторов. Только вы и я.
Если вы хотите помочь — сейчас самое важное время.
Краудфандинг уже стартовал. Благодаря нему я смогу привлечь больше людей для разработки, сбору и обработки собеседований.
Все, кто поддержат проект до релиза, получат:
🚀 1 год PRO-доступа по цене месячной подписки. Его можно активировать в любое время, например когда начнете готовится к собесам.
➕ Доступ к закрытому бета-тесту
Поддержать 👉 https://planeta.ru/campaigns/easyoffer
Спасибо, что верите в этот проект 🙌
Когда я только начинал искать первую работу программистом, меня пугала мысль, что я просто не смогу ответить на вопросы на собеседовании.
Типа… ты потратил месяцы на то, чтобы учиться, писал pet-проекты, собирал резюме, рассылаешь отклики — и всё может закончиться на одном-единственном вопросе, на который ты не знаешь ответ.
Я реально боялся.
Я смотрел видео mock-собеседований на YouTube, останавливал каждое, выписывал вопросы в Notion. Потом вручную писал к ним ответы. И потом ещё по нескольку раз перечитывал. Такой вот "тренажёр" на коленке.
📎 (там на картинке — один из моих реальных списков в Notion, ставь 🔥 если тоже так делал)
В какой-то момент я посчитал — у меня уже было выписано больше 500 вопросов. Я почувствовал ужас.
Потому что невозможно всё это зазубрить. А что, если спросят как раз тот, к которому я не успел подготовиться?..
Тогда и пришла идея
А что если понять, какие из вопросов встречаются чаще всего? Чтобы не учить всё подряд, а сфокусироваться на главном.
Так родился easyoffer.
Сначала — просто как пет-проект, чтобы показать в резюме и подготовиться к собесам. А потом оказалось, что он реально помогает людям. За первые месяцы его посетили сотни тысяч человек. И я понял: это больше, чем просто пет-проект.
Сейчас я делаю EasyOffer 2.0
И уже не один, а вместе с вами.
В новой версии будут:
– вопросы из реальных собесов, с фильтрацией по грейду, компании, типу интервью
– тренажёр с карточками (по принципу интервальных повторений — как в Anki)
– база задач с интервью
– тренажёр «реальное собеседование», чтобы отрепетировать как в жизни
Каждая фича упрощает и сокращает время на подготовку. Все эти штуки я бы мечтал иметь, когда сам готовился к собеседованиям.
Я делаю всё на свои деньги. Никаких инвесторов. Только вы и я.
Если вы хотите помочь — сейчас самое важное время.
Краудфандинг уже стартовал. Благодаря нему я смогу привлечь больше людей для разработки, сбору и обработки собеседований.
Все, кто поддержат проект до релиза, получат:
🚀 1 год PRO-доступа по цене месячной подписки. Его можно активировать в любое время, например когда начнете готовится к собесам.
➕ Доступ к закрытому бета-тесту
Поддержать 👉 https://planeta.ru/campaigns/easyoffer
Спасибо, что верите в этот проект 🙌
👍6