Pro Python
1.29K subscribers
85 photos
20 files
102 links
Канал создан, чтобы заинтересовать вас языками программирования.

@ - связь, реклама
Download Telegram
Разница между абстрактными классами и интерфейсами ООП

Интерфейсы и абстрактные классы являются важными концепциями объектно-ориентированного программирования (ООП), которые помогают в проектировании кода и его структурировании.

Интерфейсы - определяют набор методов, которые класс должен реализовать, но не содержит их реализации. В большинстве языков программирования класс может реализовывать несколько интерфейсов, что позволяет использовать множественное наследование. Интерфейсы не могут содержать конкретные реализации методов. Они только определяют сигнатуры методов. Интерфейсы обычно не могут содержать состояние (поля или свойства). В некоторых языках, таких как C#, интерфейсы могут иметь свойства, но без конкретной реализации.

Абстрактные классы - могут содержать как абстрактные методы (без реализации), так и конкретные методы (с реализацией). В большинстве языков программирования класс может наследовать только один абстрактный класс. Это ограничивает множественное наследование. Абстрактные классы могут содержать как абстрактные методы, так и методы с конкретной реализацией. Это позволяет предоставить общий код, который будет использоваться в подклассах. Абстрактные классы могут содержать состояние (поля и свойства), что позволяет им хранить данные и предоставлять их реализацию.

🛩Pro Python. Подписаться
Please open Telegram to view this post
VIEW IN TELEGRAM
1
Абстрактный класс

В Python можно создать абстрактный класс с использованием модуля abc (Abstract Base Classes). Этот модуль позволяет определять абстрактные методы, которые должны быть реализованы в подклассах. Абстрактный класс не может быть инициализирован напрямую, он предназначен только для наследования.

🛩Pro Python. Подписаться
Please open Telegram to view this post
VIEW IN TELEGRAM
😐1
Снимок экрана на Python

Используется класс ImageGrab из библиотеки Pillow. Функция ImageGrab.grab используется для захвата экрана.
👍1
🚀Полезные библиотеки Python

👀marshmallow

📚Библиотека для сериализации и десериализации объектов.

⚙️ Установка 👇

pip install marshmallow


🖥Документация

🛩Pro Python. Подписаться
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
notepadProPython.py
4 KB
Простой текстовый редактор на Python

Используется библиотека tkinter

🛩Pro Python. Подписаться
Please open Telegram to view this post
VIEW IN TELEGRAM
Потоки и процессы

В современном компьютерном мире понятия потоков (threads) и процессов (processes) играют ключевую роль в обеспечении многозадачности и эффективного использования ресурсов системы.

Процессы

Процесс - это экземпляр программы, который выполняется на компьютере. Каждый процесс имеет своё собственное пространство памяти, системные ресурсы и данные. Процессы создаются операционной системой и могут быть запущены пользователем или другой программой.

Ключевые характеристики процессов:

🔤 Изоляция памяти: Каждый процесс работает в своем собственном адресном пространстве. Это означает, что данные одного процесса не могут быть напрямую доступны или изменены другим процессом.

🔤 Ресурсы: Процессы имеют свои собственные дескрипторы файлов, системные ресурсы и окружение.

🔤 Безопасность: Изоляция памяти обеспечивает безопасность данных между процессами, предотвращая случайное или намеренное изменение данных другими процессами.
Создание и управление: Создание нового процесса (форк) занимает больше времени и ресурсов, так как операционная система должна выделить память и ресурсы для нового процесса.

Потоки

Поток (или нить) - это наименьшая единица обработки, которая выполняется в пределах процесса. Потоки позволяют параллельно выполнять несколько задач внутри одного процесса, что увеличивает эффективность использования ресурсов процессора.

Ключевые характеристики потоков:

🔤 Общее адресное пространство: Все потоки в одном процессе разделяют одно и то же адресное пространство и ресурсы, такие как дескрипторы файлов и системные данные.

🔤 Легковесность: Создание и управление потоками менее ресурсоёмко по сравнению с процессами. Потоки могут быстро переключаться, что делает их идеальными для выполнения параллельных задач.

🔤 Синхронизация: Поскольку потоки разделяют общее адресное пространство, они могут легко обмениваться данными, но это требует механизмов синхронизации (например, мьютексов или семафоров) для предотвращения конфликтов при одновременном доступе к общим ресурсам.

🔤 Производительность: Потоки позволяют использовать возможности многоядерных процессоров, выполняя задачи параллельно и улучшая общую производительность системы.

🛩Pro Python. Подписаться
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
Кортежи в pattern matching

В качестве шаблонов в pathern matching в Python могут выступать кортежи. Эти примеры показывают, как можно использовать pattern matching для работы с кортежами в Python. С помощью этой функциональности можно значительно упростить обработку различных структур данных.

🛩Pro Python. Подписаться
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
✈️Все типы апдейтов в Telegram Bot API

🛩Pro Python. Подписаться
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Все типы данных в PostgreSQL

PostgreSQL — это мощная реляционная база данных с широкими возможностями, включая поддержку различных типов данных. Давайте рассмотрим основные типы данных, которые доступны в PostgreSQL.

1. Числовые типы
- INTEGER: Целые числа (4 байта). Диапазон: от -2,147,483,648 до 2,147,483,647.
- BIGINT: Большие целые числа (8 байт). Диапазон: от -9,223,372,036,854,775,808 до 9,223,372,036,854,775,807.
- SMALLINT: Малые целые числа (2 байта). Диапазон: от -32,768 до 32,767.
- DECIMAL или NUMERIC: Числа с фиксированной точкой. Полезно для финансовых данных. Формат: DECIMAL(10, 2).
- FLOAT: Числа с плавающей точкой (4 байта). Может быть представлен как FLOAT4 или FLOAT8.
- REAL: Числа с плавающей точкой одинарной точности (4 байта).
- DOUBLE PRECISION: Числа с плавающей точкой двойной точности (8 байт).

2. Символьные типы
- CHAR(n): Фиксированная длина строк (n символов).
- VARCHAR(n): Переменная длина строк (максимум n символов).
- TEXT: Не ограниченная длина строк. Полезно для хранения больших текстов.

3. Булевый тип
- BOOLEAN: Логические значения (TRUE, FALSE, NULL).

4. Дата и время
- DATE: Дата (год, месяц, день).
- TIME: Время (часы, минуты, секунды).
- TIMESTAMP: Дата и время (без указания часового пояса).
- TIMESTAMPTZ: Дата и время (с указанием часового пояса).
- INTERVAL: Период времени.

5. Геометрические типы
- POINT: Точка в 2D пространстве.
- LINE: Непрерывная прямая.
- CIRCLE: Круг.
- POLYGON: Многоугольник.

6. Сетевые типы
- CIDR: IPv4 и IPv6 адреса с масками.
- INET: IPv4 и IPv6 адреса без маски.
- MACADDR: MAC-адреса.

7. JSON и XML
- JSON: Данные в формате JSON, позволяют хранить несопоставленные данные.
- JSONB: Бинарный формат JSON, более эффективен для хранения и операций.
- XML: Хранение и запрос данных в формате XML.

8. Модель данных
- ARRAY: Массивы. Позволяют хранить массив значений одного типа.
- COMPOSITE: Пользовательские типы данных, составленные из других типов.
- HSTORE: Набор пар ключ-значение. Полезен для хранения схематически не структурированных данных.

9. Уникальные типы
- UUID: Уникальные идентификаторы, генерируемые на основе алгоритма.
- TSVECTOR и TSQUERY: Для полнотекстового поиска.

Заключение
PostgreSQL предлагает огромный выбор типов данных, позволяющих гибко управлять вашей информацией. Правильный выбор типа данных может существенно улучшить производительность и управляемость вашей базы данных. Убедитесь, что вы используете подходящие типы данных для оптимизации вашего приложения!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21
4🥰1
Хотели бы видеть разборы решения задач ЕГЭ по инфе на python?
Anonymous Poll
82%
Да
18%
Нет
Начнём с рассмотрения задач 13 типа ЕГЭ по Информатике (Работа с сетью), они затрагивает организацию компьютерных сетей, адресацию, протоколы передачи данных.

Но для начала немного теории.

IP-адрес - это уникальный идентификатор, который назначается каждому устройству, подключенному к сети интернет. Он позволяет устройствам взаимодействовать друг с другом и обмениваться данными.

Существуют два основных типа IP-адресов:

IPv4: Используется в большинстве современных сетей. Представляет собой 32-битное число, которое записывается в виде четырех чисел от 0 до 255, разделенных точками, каждое из которых весит по 8 бит (например, 192.168.1.1). (Используется на ЕГЭ)
IPv6: Новая версия IP-адреса, использующая 128-битное число, записанное в шестнадцатеричном виде (например, 2001:0:200:3:0:0:0:1).

Адрес сети - это начальный IP-адрес диапазона IP-адресов, которые относятся к одной сети. Он используется для идентификации этой сети и является частью объекта сети, который также включает в себя маску подсети.

Маска - это 32-битное число, которое определяет, какая часть IP-адреса используется для идентификации сети, а какая - для идентификации конкретного устройства в сети.

По IP и маске можно найти адрес сети.
Например, IP - 192.168.1.10 Маска - 255.255.255.0
Нужно перевести в двоичное представление и выполнить побитовую операцию AND
IP-адрес: 11000000 10101000 00000001 00001010
Маска подсети: 11111111 11111111 11111111 00000000
Результат побитовой операции AND: 11000000 10101000 00000001 00000000 = 192.168.1.0 в десятеричном представлении. Это адрес сети

Дальше в процессе решения задач разберёмся подробнее, будем использовать модуль ipaddress
👍1
Решаем при помощи модуля ipaddress

from ipaddress import *

ip="145.92.137.88"
mask = "255.255.240.0"

network = ip_network(f"{ip}/{mask}", strict=False)

print(network) #145.92.128.0/20


Фукнция ip_network() возвращает нам объект сети (IPv4Network), в формате строки: 145.92.128.0/20. Слешом разделены искомый IP адрес сети и число 20 (маска, может задаваться в таком формате) показывает, сколько бит IP-адреса используется для идентификации сети, а сколько - для идентификации устройства внутри сети. Простыми словами это значит, что маска содержит 20 единиц в двоичном представлении, это нам пригодится для решения других задач такого типа.

Из полученного результата (145.92.128.0) следует, что ответ BHEA

Примечание: параметр strict False, чтобы функция не проверяла маску на соответствие стандартам.
👍1
ip = "218.159.208.24"
address = "218.159.192.0"
for mask in range(33):
network = ip_network(f"{ip}/{mask}", False)
if address in str(network):
print(network.netmask)


Перебираем все возможные варианты масок, то есть 0 от 32 (потому что максимум 32 единицы, а минимум ни одной в двоичном представлении)
При помощи функции ip_network() находим адрес сети, выводим в консоль подходящие маски для этого адреса.

Получаем

255.255.192.0
255.255.224.0


Каждое число представляет отдельный байт, видим что самый наибольший третий байт равен 224
👍2
from ipaddress import *

mask = "255.255.255.192"

net = ip_network(f"0.0.0.0/{mask}")
print(net.num_addresses - 2)


Для получения сети мы используем фиктивный IP-адрес, который используется для определения сети, так как адрес сети будет выведен правильно с учетом маски.

Обращаемся к свойству num_addresses, получим количество возможных iP-адресов в данной сети и отнимем 2 (по условию задачи) и получим 62
2
from ipaddress import *

mask = "255.255.240.0"
ip = "232.126.150.18"
net = ip_network(f"{ip}/{mask}", False)

ip = ip_address(ip)
net_ip = ip_address(str(net).split("/")[0])

print(int(ip)-int(net_ip))


Номер компьютера сети равен разнице IP-адреса компьютера и адреса сети. Находим адрес сети по маске и IP. Дальше при помощи функции ip_address получаем объекты IP-адресов в правильном виде. В адресе сети избавляемся от маски. Далее отнимаем от IP-адреса компьютера адрес сети, предварительно конвертировав оба значения в десятичное целочисленное число (int) для удобства и получаем ответ: 1554
🔥51😎1
Python и веб-разработка: Быстрый старт с FastAPI

FastAPI — современный веб-фреймворк для создания API на Python с поддержкой асинхронного программирования. Он позволяет быстро и легко разрабатывать высокопроизводительные RESTful API, используя аннотации типов для валидации данных.

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def read_root():
return {"message": "Hello, World!"}

@app.get("/items/{item_id}")
async def read_item(item_id: int, q: str = None):
return {"item_id": item_id, "query": q}


Запуск
uvicorn main:app --reload
👍7