Русский
Открыть в Telegram
PPythoner

Pythoner

@pythonercode · канал · Технологии · в индексе с 20.04.2026
6 535подписчиков−43 за неделю
637средний охват поста
9.8%ER — охват к подписчикам
6постов за 30 дней
P
Pythoner
Фотография
✈️В больших проектах важно точно понимать, что пошло не так. Вместо того чтобы ловить все подряд через Exception, создавайте собственные исключения: class MyError(Exception): pass ➡️Теперь можно выбросить исключение, связанное с вашей логикой: raise MyError("Что-то пошло не так") ➡️Зачем это нужно? — Код становится читаемее — Ошибки легче отлавливать — Проще отлаживать и тестировать — Можно группировать ошибки по типу ➡️Вы даже можете создать иерархию ошибок: class ValidationError(MyError): pass class DatabaseError(MyError): pass 💡Такой подход особенно полезен в API, играх, сложных скриптах и т.д. — везде, где важно знать какая именно ошибка произошла. 🐍 Pythoner
7 · 1.3K ·
P
Pythoner
Фотография
✈️Функция zip_longest() из модуля itertools объединяет несколько последовательностей, заполняя недостающие значения указанным значением. ➡️Пример: from itertools import zip_longest names = ["Анна", "Борис"] scores = [90] for name, score in zip_longest(names, scores, fillvalue="—"): print(name, score) Анна 90 Борис — 💡Полезно при работе с данными разной длины, чтобы не потерять элементы. 🐍 Pythoner
10 · 1.4K ·
P
Pythoner
Фотография
✈️"Чистая" функция - это функция, которая при выполнении одного и того же входного значения всегда возвращает одинаковый результат и не имеет побочных эффектов. То есть, она не влияет на состояние программы или внешние переменные. Результат работы "чистой" функции зависит только от переданных ей аргументов. ➡️Пример чистой функции Давайте рассмотрим пример простой чистой функции на языке Python. Предположим, у нас есть функция double, которая удваивает переданное число: def double(number): return number * 2 ⬆️Эта функция является "чистой", потому что она всегда возвращает удвоенное значение переданного числа и не имеет побочных эффектов. Независимо от контекста выполнения и внешних переменных, результат работы этой функции будет одинаковым при одинаковом входном значении. ➡️Пример нечистой функции Рассмотрим теперь пример нечистой функции на языке Python. Предположим, у нас есть функция add_to_list, которая добавляет переданное значение в глобальный список: my_list = [] def add_to_list(value): my_list.append(value) ⬆️Эта функция не является "чистой", потому что она изменяет состояние программы путем добавления значения в глобальный список my_list. Результат работы этой функции зависит не только от переданного аргумента, но и от текущего состояния списка my_list. 🐍Pythoner
9 · 1K ·
P
Pythoner
Фотография
✈️В Django ORM можно использовать механизм миграций для изменения структуры базы данных без необходимости вручную вносить изменения через SQL запросы. Миграции позволяют вам определять изменения в моделях и применять их к базе данных автоматически. ➡️Для начала работы с миграциями в Django необходимо создать начальное состояние базы данных, которое будет соответствовать текущим моделям вашего приложения. Для этого можно воспользоваться командой python manage.py makemigrations, которая создаст файл миграции в папке migrations вашего приложения. ➡️Затем, чтобы применить миграции к базе данных, можно воспользоваться командой python manage.py migrate, которая применит все необходимые изменения к базе данных. При этом Django будет автоматически отслеживать и применять новые миграции при изменениях в моделях. ➡️Миграции в Django ORM могут включать различные операции, такие как создание новых таблиц, добавление и удаление полей, изменение типа данных и многое другое. Кроме того, можно создавать собственные миграции с помощью команды python manage.py makemigrations --empty, чтобы определить свои собственные изменения в базе данных. 👀Использование миграций в Django ORM делает процесс изменения структуры базы данных более удобным и безопасным, позволяя сохранить целостность данных и избежать ошибок при ручном внесении изменений. 🐍Pythoner
5 · 1.3K ·
P
Pythoner
Фотография
✈️Bulkhead (перегородка на корабле) — это архитектурный паттерн, который защищает сервис от «цепных» отказов. Идея простая: если один компонент падает или начинает работать медленно, остальные продолжают функционировать. ➡️Как это работает: - разделение ресурсов (пулы потоков, подключения к БД, очереди) для разных компонентов - ограничение «захвата» всех ресурсов одним зависимым сервисом - предотвращение лавинообразных отказов ➡️Пример: Если сервис обращается к 3 внешним API, у каждого свой пул потоков. Тогда сбой в одном API не «забьёт» все подключения и не остановит остальные запросы. 💡Плюсы: — устойчивость к локальным сбоям — предсказуемая деградация системы (отваливается часть, а не всё) 💡Минусы: — усложнение конфигурации и мониторинга — необходимость балансировки ресурсов между пулами 🐍Pythoner
5 · 1.4K ·
P
Pythoner
Фотография
✈️В Python для работы с SQLite мы будем использовать модуль sqlite3, который входит в стандартную библиотеку Python. Начнем с импорта модуля и создания соединения с базой данных: import sqlite3 # Создание соединения с базой данных conn = sqlite3.connect('mydatabase.db') ➡️После создания соединения мы можем создать таблицы в нашей базе данных. Вот пример создания таблицы "users": # Создание таблицы "users" conn.execute('''CREATE TABLE users (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, age INTEGER NOT NULL);''') ➡️Вставка данных в базу данных После создания таблицы мы можем добавить данные в базу данных. Для этого мы можем использовать метод execute() и executemany() для вставки одной или нескольких строк данных соответственно. Вот пример вставки данных в таблицу "users": # Вставка данных в таблицу "users" conn.execute("INSERT INTO users (name, age) VALUES ('John Doe', 25)") conn.execute("INSERT INTO users (name, age) VALUES ('Jane Smith', 30)") conn.executemany("INSERT INTO users (name, age) VALUES (?, ?)", [('Alice Johnson', 35), ('Bob Brown', 40)]) 🐍Pythoner
13 · 1.3K ·
P
Pythoner
Фотография
✈️В Python все является объектом, даже сами классы. Это открывает перед нами удивительные возможности для создания динамических структур кода. Давайте погрузимся в мир создания классов и функций "на лету" с помощью type() и метаклассов. ➡️Магия функции type() Функция type() в Python - это не просто инструмент для определения типа объекта. Она также может быть использована для создания новых классов динамически. Вот простой пример: MyClass = type('MyClass', (), {'x': 42, 'my_method': lambda self: print("Hello!")}) obj = MyClass() print(obj.x) # Выведет: 42 obj.my_method() # Выведет: Hello! ⬆️Здесь мы создали класс MyClass с атрибутом x и методом my_method. Удивительно, правда? ➡️Шаг вперед: метаклассы Метаклассы - это классы классов. Они позволяют нам контролировать процесс создания классов. Рассмотрим пример: class MyMetaclass(type): def __new__(cls, name, bases, attrs): attrs['additional_method'] = lambda self: print("I'm additional!") return super().__new__(cls, name, bases, attrs) class MyClass(metaclass=MyMetaclass): pass obj = MyClass() obj.additional_method() # Выведет: I'm additional! ⬆️В этом примере мы создали метакласс, который добавляет новый метод ко всем классам, использующим его. ➡️Практическое применение Динамическое создание классов и функций может быть полезно в различных сценариях: - Фабрики классов: создание классов на основе внешних данных или конфигурации. - Декораторы классов: модификация классов без изменения их исходного кода. - ORM (Object-Relational Mapping): динамическое создание классов на основе структуры базы данных. 🐍Pythoner
12 · 1.2K ·
P
Pythoner
Фотография
➡️Функция .upper() Функция .upper() в Python используется для преобразования всех символов в строке в верхний регистр. Это очень полезно, когда вы хотите сравнить строки без учета регистра или обеспечить единообразие ввода данных. Пример использования: text = 'Hello, World!' print(text.upper()) # Вывод: 'HELLO, WORLD!' ➡️Функция .lower() С другой стороны, функция .lower() преобразует все символы строки в нижний регистр. Это также может быть полезно при сравнении строк или обеспечении единообразия ввода. Пример использования: text = 'Hello, World!' print(text.lower()) # Вывод: 'hello, world!' ➡️Применение .upper() и .lower() Функции .upper() и .lower() часто используются вместе для обеспечения единообразия ввода и процесса обработки данных. Например, вы можете преобразовать ввод пользователя в нижний регистр перед проверкой его в словаре, где все ключи хранятся в нижнем регистре. Таким образом, вы можете быть уверены, что ваш код будет работать независимо от того, как пользователь ввел данные. 🐍Pythoner
10 · 1.2K ·
P
Pythoner
Фотография
✈️Sparrow — это open-source инструмент для автоматического извлечения данных из документов (PDF, изображений и т.д.). Он использует ML-модели, чтобы превращать неструктурированные файлы в готовые к анализу данные. ➡️Пример использования sparrow через API: import requests response = requests.post( 'http://localhost:8000/extract', files={'file': open('ваш_документ.pdf', 'rb')} ) print(response.json()) # Ваши данные в структурированном виде! 💡Ключевое преимущество: Sparrow извлекает текст, таблицы и рукописные данные из документов, преобразуя их в структурированный формат с полной локальной обработкой для вашей безопасности. 🐍Pythoner
21 · 1.2K ·
P
Pythoner
Фотография
✈️Метод dict.get() в Python используется для получения значения по ключу из словаря. Он принимает ключ в качестве аргумента и возвращает соответствующее значение. В случае, если ключ отсутствует в словаре, метод возвращает значение по умолчанию, которое можно указать вторым аргументом. ➡️Пример получения значения по ключу: data = {"name": "Иван", "age": 30} name = data.get("name") — «Иван» age = data.get("age", 25) — 30 (ключ есть, берём его значение) print(name, age) — вывод: «Иван» 30. ➡️Использование значения по умолчанию: data = {"name": "Анна"} Ключа "city" нет, поэтому вернётся значение по умолчанию city = data.get("city", "Не указан") — «Не указан» print(city) — вывод: «Не указан». ➡️Работа с вложенными словарями: data = { "user": { "name": "Павел", "email": "example.com" } } email = data.get("user", {}).get("email", "Email отсутствует") — «example.com» phone = data.get("user", {}).get("phone", "Телефон не указан") — «Телефон не указан». 💡Метод dict.get() удобен в тех случаях, когда нужно получить значение из словаря и быть уверенным, что при отсутствии ключа программа не будет выдавать ошибку. Он также позволяет удобно установить значение по умолчанию, если ключ не найден. 🐍Pythoner
12 · 1.4K ·
P
Pythoner
Фотография
✈️attrs — библиотека для создания классов с автоматической реализацией методов __init__ и других. Главная функция - автоматически генерирует стандартные методы Python-классов через декларативный синтаксис, сохраняя контроль над типами и валидацией. ➡️Пример использования: import attr @attr.s class Cat: name: str = attr.ib() # обязательное поле age: int = attr.ib(default=1) # с значением по умолчанию is_fluffy: bool = attr.ib(default=True) # и ещё одно murzik = Cat(name="Мурзик", age=3) print(murzik) # Выведет: Cat(name='Мурзик', age=3, is_fluffy=True) 💡Заключение: attrs — даёт скорость разработки + безопасность типов. Совместимость с mypy и IDE (подсказки типов работают из коробки). 🐍Pythoner
13 · 1.7K ·
P
🤔Разбор Эквивалентно a is b and b is c. None - единственный объект, а, b, с на него ссылаются 🐍 Pythoner
1 · 1.5K ·
P
Pythoner
Фотография
✈️Библиотека для контроля нагрузки при выполнении асинхронных HTTP-запросов или любых других корутин. Позволяет ограничивать количество одновременных операций с гибкими настройками. ➡️Главная функция: Ограничивает RPS (запросов в секунду) и количество одновременных соединений — защищает сервисы от перегрузки при парсинге или работе с API. ➡️Пример использования: import aiometer import httpx async def fetch(url): async with httpx.AsyncClient() as client: return await client.get(url) urls = [...] # Список URL results = await aiometer.run_on_each(fetch, urls, max_per_second=5) 🖥GitHub 💡Полезно Интеграция с asyncio и anyio + поддержка кастомных лимитеров. Замена самописным «костылям» с семафорами. 🐍 Pythoner
11 · 1.4K ·
P
Pythoner
Фотография
✈️DockerPyze – удобная библиотека для работы с Docker из Python. DockerPyze позволяет управлять Docker-контейнерами прямо из Python-кода — запускать, останавливать и проверять их статус без сложных команд. ➡️Зачем нужно: Чтобы автоматизировать работу с Docker через простые Python-скрипты вместо ручных команд в терминале. ➡️Пример использования: from dockerpyze import DockerClient # Подключаемся к Docker docker = DockerClient() # Получаем список всех контейнеров containers = docker.list_containers() print(f"Запущено контейнеров: {len(containers)}") 🖥 GitHub 💡Заключение - Работает со всем, что умеет Docker. - Команды как в Python — понятные и читаемые. - Не нужно самому разбирать ошибки — библиотека сделает это за вас. 🐍 Pythoner
14 · 1.3K ·
P
Pythoner
Фотография
✈️Бинарный поиск - это эффективный алгоритм поиска элемента в упорядоченном списке данных. ➡️Бинарный поиск основан на принципе "разделяй и властвуй". Он работает следующим образом: сначала мы определяем середину списка и сравниваем искомый элемент с этой серединой. Если элемент равен середине, то поиск завершается успешно. Если элемент меньше середины, то мы продолжаем поиск в левой половине списка. Если элемент больше середины, то мы продолжаем поиск в правой половине списка. Повторяем эти шаги до тех пор, пока не найдем искомый элемент или пока список не будет пустым. ➡️Вот пример реализации бинарного поиска на языке Python: def binary_search(arr, target): left = 0 right = len(arr) - 1 while left <= right: mid = (left + right) // 2 if arr[mid] == target: return mid elif arr[mid] < target: left = mid + 1 else: right = mid - 1 return -1 # Пример использования arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] target = 5 result = binary_search(arr, target) if result != -1: print("Элемент найден в позиции", result) else: print("Элемент не найден") ➡️Преимущества бинарного поиска Бинарный поиск обладает несколькими преимуществами по сравнению с другими алгоритмами поиска. Во-первых, он имеет временную сложность O(log n), что делает его очень эффективным даже для больших списков данных. Во-вторых, он работает только с упорядоченными списками, что позволяет сократить количество операций поиска. И, наконец, бинарный поиск является универсальным и может быть применен для поиска элементов в любом упорядоченном списке данных. 🐍Pythoner
16 · 1.5K ·
P
Pythoner
Фотография
✈️glom – это библиотека для обработки и трансформации данных в Python. Она помогает легко извлекать, преобразовывать и структурировать сложные данные, такие как JSON или вложенные словари. ➡️ Ключевая функция: Позволяет работать с глубоко вложенными структурами данных через простой и читаемый синтаксис, заменяя многострочные операции цепочками .get() или вложенными циклами. ➡️Пример использования: from glom import glom data = {'a': {'b': {'c': 'Hello, glom!'}}} result = glom(data, 'a.b.c') # Достаём значение по цепочке ключей print(result) # Вывод: 'Hello, glom!' 🖥GitHub 💡Главный плюс: Уменьшает сложность кода при работе с глубоко вложенными структурами, делая его чище и удобнее для поддержки. 🐍Pythoner
14 · 1.5K ·
P
Pythoner
Фотография
✈️В Python деструкторы — это специальные методы, которые вызываются, когда объект собирается с мусором (т.е., когда он больше не нужен и память, занимаемая объектом, освобождается). Деструкторы позволяют выполнить некоторые завершающие действия перед уничтожением объекта, например, освободить ресурсы или завершить соединения. ➡️Применение деструкторов ограничено в связи с наличием сборщика мусора. Их стоит использовать только когда нужно правильно освободить внешние ресурсы, например файлы. ➡️Вот пример класса с деструктором: class MyClass: def __init__(self, name): self.name = name print(f"Объект {self.name} создан.") def __del__(self): print(f"Объект {self.name} уничтожен.") # Создаем объект класса obj = MyClass("TestObject") # Удаляем объект del obj # Если вы хотите избежать автоматического освобождения памяти, # можете использовать осмысленное завершение программы, например: import time time.sleep(1) # daем немного времени, чтобы увидеть сообщение деструктора ⬆️В этом примере создается объект MyClass, после чего его деструктор будет вызван при удалении объекта с помощью команды del obj. Таким образом, в консоль будет выведено сообщение о создании объекта, а затем сообщение о его уничтожении. 🐍Pythoner
9 · 1.5K ·
P
Pythoner
Фотография
✈️EasyOCR – это библиотека на Python, которая позволяет легко извлекать текст из изображений и PDF. Она поддерживает более 80 языков и идеально подходит для автоматизации обработки документов. ➡️Основная задача: Распознавание текста на изображениях с высокой точностью, даже в сложных условиях (разные шрифты, низкое качество). ➡️Пример использования: import easyocr reader = easyocr.Reader(['ru', 'en']) # Выбираем языки (русский и английский) result = reader.readtext('image.jpg') # Распознаём текст print(result) # Выводим результат 🖥GitHub 💡Главный плюс: Поддержка множества языков из коробки и простота интеграции в Python-проекты. Отлично подходит для задач автоматизации, анализа документов и обработки изображений. 🐍Pythoner
38 · 1.5K ·
P
Pythoner
Фотография
✈️Сегодня поговорим о том, как создавать крутые CLI-приложения с помощью Click. Если вам надоело писать бесконечные if'ы для обработки аргументов командной строки, то этот пост определенно для вас! ➡️Начнем с того, почему вообще стоит использовать Click, а не встроенный argparse: —Декораторный подход, который выглядит элегантно и интуитивно понятен —Автоматическая генерация справки и сообщений об ошибках —Вложенные команды из коробки —Поддержка автодополнения в shell ➡️Давайте посмотрим на простой, но реальный пример. Представим, что мы делаем утилиту для работы с файлами: import click @click.group() def cli(): """Утилита для работы с файлами""" pass @cli.command() @click.argument('path') @click.option('--lines', '-l', is_flag=True, help='Показать количество строк') def analyze(path, lines): """Анализирует файл и выводит статистику""" try: with open(path) as f: content = f.readlines() if lines: click.echo(f'Количество строк: {len(content)}') except FileNotFoundError: click.secho('Файл не найден! 😱', fg='red') if __name__ == '__main__': cli() Крутая штука в Click – это то, как легко добавлять новые команды. Хотите добавить подкоманду? Просто навешиваете еще один декоратор! ➡️А теперь лайфхак, который многие упускают: Click умеет создавать красивые прогресс-бары: @cli.command() @click.argument('path') def process(path): """Обрабатывает файлы с прогресс-баром""" files = os.listdir(path) with click.progressbar(files, label='Обработка файлов') as bar: for f in bar: # что-то делаем с файлом time.sleep(0.1) ➡️Про что еще стоит знать? Click отлично работает с цветным выводом. Хотите привлечь внимание пользователя? Используйте click.secho(): click.secho('Внимание! 🚨', fg='yellow', bold=True) click.secho('Ошибка! ❌', fg='red') click.secho('Успех! ✅', fg='green') ➡️И напоследок, трюк – создание интерактивных подтверждений: if click.confirm('Ув… Читать полностью →
27 · 1.3K ·
P
Pythoner
Фотография
✈️Практическое руководство по реализации современных языковых моделей (включая GPT) на чистом Python и PyTorch. Идеально для изучения архитектуры LLM без использования готовых библиотек. ➡️Главная задача: Понять внутреннее устройство трансформеров и механизмов self-attention через построение моделей поэтапно — от токенизации до генерации текста. ➡️Установка (клонирование репозитория): git clone https://github.com/rasbt/LLMs-from-scratch.git cd LLMs-from-scratch pip install -r requirements.txt ➡️Упрощенный пример для наглядности: from src.model import GPT # Создание экземпляра модели model = GPT(vocab_size=10000, n_heads=8, n_layers=6) # Обучение модели model.train(text_data, epochs=10) 🖥GitHub 💡Основной плюс: Полная прозрачность реализации — каждый компонент (positional encoding, multi-head attention) написан вручную с пояснениями в Jupyter-ноутбуках. 🐍 Pythoner
24 · 1.3K ·
P
Pythoner
Фотография
✈️Keyring – библиотека для работы с системным хранилищем учетных данных (Keychain, KWallet, Secret Service). Позволяет безопасно хранить и получать пароли, используя механизмы защиты ОС. ➡️Главная задача: Устраняет необходимость хранения паролей в конфигах или коде, используя защищенные системные хранилища. ➡️Пример использования: import keyring # Сохранение keyring.set_password("my_app", "username", "secret123") # Получение password = keyring.get_password("my_app", "username") 🖥GitHub 💡Ключевое преимущество: Кроссплатформенная работа с нативными хранилищами (Windows Credential Locker, macOS Keychain, Linux Secret Service) без привязки к конкретной ОС. 🐍 Pythoner
14 · 1.4K ·
P
Pythoner
Фотография
✈️pdoc – автоматически создаёт чистую и современную документацию из docstring и аннотаций типов Python. Альтернатива Sphinx с фокусом на простоту и читаемость. pdoc превращает docstring и type hints в интерактивную документацию без сложных конфигов. ➡️Пример использования: # Генерация документации для модуля pdoc ./my_module --output-dir ./docs 🖥GitHub 💡Плюсы: Поддержка type hints и математических формул в Markdown из коробки. 🐍 Pythoner
19 · 1.5K ·

Открытая публичная лента из поискового индекса ChatCrawler — «Google по публичному Telegram»; обновляется по мере обхода площадки. Время — UTC.

Только публичный контент, официальный API Telegram. О проекте · Вопросы · Границы индекса · Убрать страницу из выдачи · Каталог · Поиск · Как мы считаем