Ghostly Python
9.03K subscribers
535 photos
24 videos
599 links
Погружаемся в мир Python: задачи, фишки, библиотеки и террабайты полезного материала.

Сотрудничество: @heywan_n1

Цены: @heywan_media

Реклама на бирже: https://telega.in/c/+IOa15XDNbxRkYzNi
Download Telegram
Please open Telegram to view this post
VIEW IN TELEGRAM
😁26💯4😍31🤣1
📱 Фишка: bisect — быстрый бинарный поиск и вставка в отсортированный список

Модуль bisect из стандартной библиотеки Python позволяет эффективно работать с отсортированными списками: выполнять бинарный поиск и вставку, сохраняя порядок.

import bisect

numbers = [1, 3, 4, 7, 9]

# Найти позицию для вставки числа 5
pos = bisect.bisect(numbers, 5)
print(pos) # ➔ 3

# Вставить число в правильное место
bisect.insort(numbers, 5)
print(numbers) # ➔ [1, 3, 4, 5, 7, 9]


📌 Как это работает?

🟢 bisect() возвращает индекс, куда можно вставить элемент, сохраняя порядок
🟢 insort() сразу вставляет элемент в нужную позицию
🟢 Работает за O(log n), что гораздо быстрее линейного поиска в больших списках

🐍 Ghostly Python | #фишки
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥83
👩‍💻 Сервер управления боксом и станцией дрона: архитектура и принципы работы

Сервер обеспечивает удалённое управление устройствами, подключёнными по WebSocket. На этапе тестирования к нему также подключено веб-приложение, через которое пользователь может управлять устройствами.

➡️ Ссылка на статью

🐍 Ghostly Python | #статьи
Please open Telegram to view this post
VIEW IN TELEGRAM
2
👩‍💻 Работа с временными файлами на Python с помощью tempfile

tempfile — встроенный модуль Python для безопасного создания временных файлов и директорий. Полезен для тестов, кэширования, временных логов и работы с внешними инструментами.

⚙️ Пример: скрипт с параметром имени пользователя

import tempfile

# Создаём временный файл
with tempfile.NamedTemporaryFile(mode='w+', delete=False) as tmp:
tmp.write("Временные данные")
tmp.seek(0)
print(tmp.read()) # ➔ Временные данные

print(f"Файл сохранён как: {tmp.name}")


💬 Как это работает:

1. NamedTemporaryFile() создаёт файл, который можно использовать как обычный файл.

2. mode='w+' означает чтение и запись.

3. delete=False — файл сохраняется после закрытия (иначе удаляется автоматически).

4. Можно использовать временные директории с tempfile.TemporaryDirectory().

🟢 Безопасное имя файла (не будет конфликтов)
🟢 Поддержка кроссплатформенности (работает и на Windows, и на Linux)
🟢 Удобно для промежуточных данных, которые не нужно сохранять надолго


🐍 Ghostly Python | #гайды
Please open Telegram to view this post
VIEW IN TELEGRAM
1
Please open Telegram to view this post
VIEW IN TELEGRAM
😁15🔥2
Вопрос с собеса

Что делает декоратор @property в Python и зачем он нужен?

Пример🔽
class Circle:
def __init__(self, radius):
self._radius = radius

@property
def diameter(self):
return self._radius * 2

c = Circle(5)
print(c.diameter) # ➔ 10
c.diameter = 12 # ➔ AttributeError: can't set attribute


Ответ🔽
@property превращает метод класса в атрибут, доступный для чтения как обычное поле. Это позволяет скрыть логику за простым синтаксисом без скобок и позволяет использовать геттеры, сеттеры и делетеры, как в других ООП-языках.

🟢 Преимущества
@property:

Позволяет изменить внутреннюю реализацию без изменения интерфейса.

Используется для контроля доступа к данным (валидация, вычисления "на лету").

Улучшает читаемость и делает API объекта более естественным.

Когда использовать:

Когда нужно вычислить значение на основе внутренних данных.

Когда требуется защитить атрибут от прямой перезаписи.

При написании библиотек и API для других разработчиков.

❗️ Для создания сеттера — используйте @<property_name>.setter. Без него — свойство только для чтения.


🐍 Ghostly Python | #собес
Please open Telegram to view this post
VIEW IN TELEGRAM
3
👩‍💻 Скрипт, который следит за тобой: автоматический аудит действий в Linux

Auditd фиксирует всё, от sudo до rm -rf. Добавим Python-скрипт — получим читаемые отчёты, алерты и соответствие требованиям ИБ. Установка, настройка, практические примеры.

➡️ Ссылка на статью

🐍 Ghostly Python | #статьи
Please open Telegram to view this post
VIEW IN TELEGRAM
4
🖼️ Библиотека: Pydantic

Pydantic — это мощная библиотека для проверки данных и управления конфигурацией с помощью аннотаций типов.

Она позволяет создавать надёжные модели данных, автоматически валидируя входные значения и преобразуя их в нужный формат.


⚙️ Пример использования:

from pydantic import BaseModel, validator

class User(BaseModel):
id: int
name: str
email: str

@validator("email")
def email_must_contain_at(cls, v):
if "@" not in v:
raise ValueError("Invalid email address")
return v

user = User(id="1", name="Alice", email="alice@example.com")
print(user.dict())


➡️ Pydantic автоматически привёл id к int и проверил email. При ошибке — вы получите понятный exception.

✔️ Установка:

pip install pydantic


➡️ Ссылка на документацию

🐍 Ghostly Python | #библиотеки
Please open Telegram to view this post
VIEW IN TELEGRAM
5🔥3
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
➡️ PyBites — платформа с ежедневными байтами практики по Python

PyBites предлагает формат "Python bites" — маленькие, но нетривиальные задачи, которые развивают не только синтаксис, но и стиль, идиомы и архитектурное мышление.

Подходит для тех, кто уже знаком с основами и хочет стать питонистее.

⛓️ Ссылка на ресурс

🐍 Ghostly Python | #ресурсы
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
👩‍💻 Как вызывать C++ из Python

Сравнение PyBind11 и ctypes: когда нужна простота и совместимость типов — выбираем PyBind11, для низкоуровневого доступа — ctypes. Как подключать C++ к Python без жертв в интерактивности.

➡️ Ссылка на статью

🐍 Ghostly Python | #статьи
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
📱 Фишка: heapq — работа с кучами и приоритетами в Python

Модуль heapq из стандартной библиотеки позволяет использовать список как двоичную минимальную кучу (heap). Это идеальный инструмент для реализации приоритетных очередей и поиска наименьших элементов.

import heapq

nums = [7, 1, 4, 9, 2]

# Превращаем список в кучу
heapq.heapify(nums)
print(nums) # ➔ [1, 2, 4, 9, 7] (куча, не просто отсортированный список)

# Извлекаем минимальный элемент
min_item = heapq.heappop(nums)
print(min_item) # ➔ 1

# Добавляем элемент с сохранением свойств кучи
heapq.heappush(nums, 3)
print(nums) # ➔ [2, 3, 4, 9, 7]


📌 Как это работает?

🟢 heapify() превращает список в структуру данных "куча" за O(n).
🟢 heappop() извлекает минимальный элемент за O(log n).
🟢 heappush() вставляет новый элемент, сохраняя свойства кучи.

🐍 Ghostly Python | #фишки
Please open Telegram to view this post
VIEW IN TELEGRAM
👍71
Please open Telegram to view this post
VIEW IN TELEGRAM
12👍1
👩‍💻 Генерация уникальных идентификаторов с помощью uuid

Модуль uuid из стандартной библиотеки Python позволяет создавать уникальные идентификаторы, которые можно использовать в базах данных, логах, конфигурациях и любых случаях, где важна уникальность.

⚙️ Пример: создание UUID разных версий

import uuid

# UUID на основе времени (версия 1)
print(uuid.uuid1()) # ➔ 8f14e45f-ea6e-11ec-8fea-0242ac120002

# UUID на основе MD5-хеша (версия 3)
print(uuid.uuid3(uuid.NAMESPACE_DNS, "example.com"))

# Случайный UUID (версия 4)
print(uuid.uuid4())

# UUID на основе SHA-1 (версия 5)
print(uuid.uuid5(uuid.NAMESPACE_DNS, "example.com"))


💬 Как это работает:

1. uuid.uuid1() — использует MAC-адрес и время (можно отслеживать источник).

2. uuid.uuid3() и uuid.uuid5() — хешируют строку с неймспейсом.

3. uuid.uuid4() — полностью случайный UUID, безопасный для большинства применений

🟢 Используется при генерации ключей, ссылок, сессий.
🟢 Все UUID соответствуют стандарту RFC 4122.
🟢 Можно использовать как строку или как байты (.hex, .int, .bytes).


🐍 Ghostly Python | #гайды
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍1
👩‍💻 Запускаем несколько интерпретаторов в коде на Python — невероятная скорость

Рассказываю, как теперь можно запускать несколько интерпретаторов в одном Python-процессе с отдельным GIL. Плюсы, детали реализации и зачем это вообще всё нужно.

➡️ Ссылка на статью

🐍 Ghostly Python | #статьи
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Вопрос с собеса

В чём разница между shallow copy и deep copy в Python?

Пример🔽
import copy

original = [[1, 2], [3, 4]]

shallow = copy.copy(original)
deep = copy.deepcopy(original)

original[0][0] = 99

print(shallow) # ➔ [[99, 2], [3, 4]]
print(deep) # ➔ [[1, 2], [3, 4]]


Ответ🔽
copy.copy() создаёт поверхностную копию объекта. Это значит, что сам объект копируется, но вложенные объекты продолжают ссылаться на те же данные.

copy.deepcopy() создаёт глубокую копию: копирует и сам объект, и все вложенные объекты, рекурсивно. В результате оригинал и копия полностью независимы.

🟢 Когда использовать:

copy() — если объект неглубокий и вложенные данные не будут изменяться.

deepcopy() — если нужно полностью изолировать копию от оригинала, включая всё содержимое.

❗️Важно: deepcopy может быть медленным на больших и вложенных структурах. Используйте осознанно.

📌 Подходит для работы со сложными структурами данных: списками списков, словарями, графами и т.д.


🐍 Ghostly Python | #собес
Please open Telegram to view this post
VIEW IN TELEGRAM
👍62
Please open Telegram to view this post
VIEW IN TELEGRAM
🥰16👍1🔥1
🖼️ Библиотека: deepdiff

DeepDiff — это мощная библиотека для поиска различий между любыми Python-объектами: словарями, списками, наборами, вложенными структурами.

ℹ️ Основные возможности:

🟢 Поиск различий между структурами любой глубины
🟢 Поддержка сравнения списков, словарей, множеств, объектов
🟢 Выдаёт точные пути до отличий (например: root['user'][0]['name'])
🟢 Форматы для сериализации (JSON) и "патчи" для применения изменений


⚙️ Пример использования:

from deepdiff import DeepDiff

a = {"name": "Alice", "age": 30, "skills": ["Python", "SQL"]}
b = {"name": "Alice", "age": 31, "skills": ["Python", "Go"]}

diff = DeepDiff(a, b)
print(diff)

Вывод:
{'values_changed': {
"root['age']": {'new_value': 31, 'old_value': 30},
"root['skills'][1]": {'new_value': 'Go', 'old_value': 'SQL'}
}}


✔️ Установка:

pip install deepdiff


➡️ Ссылка на документацию

🐍 Ghostly Python | #библиотеки
Please open Telegram to view this post
VIEW IN TELEGRAM
7
👩‍💻 Сравниваю автоматизацию n8n и скрипт на Python

Сделала автоматизацию: письма парсим, тему сверяем с Excel, логика — по листам. Всё локально и на n8n — чтоб заказчику не мучиться. Один логин в терминале, и всё крутится.

➡️ Ссылка на статью

🐍 Ghostly Python | #статьи
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
➡️ Python Morsels — ресурс с продвинутыми задачами по Python и подробными разбором решений

Python Morsels — это платформа, на которой каждую неделю присылаются небольшие, но глубокие задачи по Python.

Основной акцент — не просто на синтаксис, а на идиоматичный код, использование стандартной библиотеки и продвинутые концепции.


⛓️ Ссылка на ресурс

🐍 Ghostly Python | #ресурсы
Please open Telegram to view this post
VIEW IN TELEGRAM