Python Community
12.9K subscribers
1.26K photos
36 videos
15 files
738 links
Python Community RU - СНГ сообщество Python-разработчиков

Чат канала: @python_community_chat

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

РКН реестр:
https://knd.gov.ru/license?id=67847dd98e552d6b54a511ed&registryType=bloggersPermission
Download Telegram
📊 OpenBB (https://github.com/OpenBB-finance/OpenBB#) — это платформа для инвестиционных исследований, предоставляющая доступ к акциям, опционам, криптовалютам, форексу и макроэкономическим данным. Платформа ориентирована на пользователей всех уровней и включает в себя как командную строку, так и графический интерфейс. 🌟 OpenBB предлагает бесплатный и открытый доступ к аналитическим инструментам и может быть расширен через различные плагины. Проект также поддерживает автоматизацию процессов и интеграцию с внешними сервисами

🔥 Инструмент является бесплатным аналогом Bloomberg terminal (подписка на который стоит $20 тыс. в год!)

👩‍💻 Язык: Python

🔐 Лицензия: GNU

Github (https://github.com/OpenBB-finance/OpenBB#)



@Python_Community_ru
🐍 Микросервисные архитектуры — как ретраи влияют на отказоустойчивость микросервисов

Ретраи, или повторные запросы, — важный механизм обеспечения отказоустойчивости распределенных систем. Необходимо быть в курсе последних изменений и понимать, как ретраи эволюционировали в электронике, программировании и Java-экосистеме. Об этом подробно расскажет техлид Т-Банка Дмитрий Фролов на конференции JVM Day 30 августа в Москве. На лендинге заявлены спикеры из разных компаний, которые разберут темы по Java, Scala и Backend.

Мероприятие пройдет в штаб-квартире Т-Банка, а половину собранных средств организаторы хотят перечислить региональным техническим вузам, чтобы помочь с развитием ИТ-сферы и подготовкой квалифицированных специалистов в разных городах страны. После докладов гостей ждут настолки с лото, афтепати и нетворкинг. Чтобы принять участие в JVM Day необходимо заранее пройти регистрацию (https://meetup.tbank.ru/conference/jvm-day/).



@Python_Community_ru
This media is not supported in your browser
VIEW IN TELEGRAM
🐍 Хитрый совет по Python: как ускорить in в 1000 раз

Когда ты проверяешь, есть ли элемент в списке, Python делает это медленно — он пробегает по списку полностью.
А если ты проверяешь элемент в множестве (set), это работает в сотни раз быстрее.

📌 Пример:


data = [1, 2, 3, ..., 1000000] # большой список
queries = [42, 9999, 123456]

# Медленно:
for q in queries:
if q in data:
print(q)


🔁 Каждый q in data проходит весь список → медленно.

Правильный способ:

Преобразуй список в set один раз — и все станет быстро:


data_set = set(data)

for q in queries:
if q in data_set:
print(q)


💡 Проверка in в set работает мгновенно (как в словаре).
Такой трюк особенно полезен, если:

-у тебя много данных
-ты делаешь много проверок на вхождение

📌 Запомни: if x in список: — медленно
Лучше: if x in set(список): — быстро!



@Python_Community_ru
💡 STUMPY — библиотека для анализа временных рядов. Этот проект предлагает мощный инструмент для работы с временными последовательностями через вычисление matrix profile — специальной метрики, которая автоматически находит схожие паттерны в данных.

Инструмент поддерживает распределённые вычисления через Dask и GPU-ускорение через Numba. Технология особенно полезна для обнаружения аномалий, повторяющихся фрагментов и семантической сегментации. Библиотека одинаково хорошо работает как на небольших наборах данных, так и на временных рядах длиной в миллионы точек.

🤖 GitHub (https://github.com/stumpy-dev/stumpy)



@Python_Community_ru
📘 Потерянная глава Automate the Boring Stuff

Автор культовой книги выложил бесплатно новую главу книги (https://inventwithpython.com/blog/lost-av-chapter.html), которая не попала в издание — про автоматизацию работы с аудио и видео.

🎧 Что внутри:
— Конвертация и обрезка видео с помощью moviepy
— Преобразование аудио в текст через SpeechRecognition
— Извлечение субтитров
— Автоматизация задач с файлами .mp3, .wav, .mp4 и .avi

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

📎 Читать (https://inventwithpython.com/blog/lost-av-chapter.html)

@Pythonl

@Python_Community_ru
👩‍💻 MegaParse (https://github.com/QuivrHQ/MegaParse) — высокопроизводительный парсер, который способен преобразовывать всевозможные типы документов (Word документы, PDF-файлы или даже презентации PowerPoint)!

🌟 Его основная цель — преобразовывать информацию из документов в текст для LLM, при этом минимизируя различные потери данных.

🔐 Лицензия: Apache-2.0

🖥 Github (https://github.com/QuivrHQ/MegaParse)



@Python_Community_ru
🖥 Что выведет код ниже?


def append_to_list(val, my_list=[]):
my_list.append(val)
return my_list

print(append_to_list(1))
print(append_to_list(2))
print(append_to_list(3))


🤯 Подвох
Многие думают, что каждый вызов append_to_list() создаёт новый список, и ожидают вывод:


[1]
[2]
[3]

Но на самом деле Python выведет:


[1]
[1, 2]
[1, 2, 3]

🧠 Почему так происходит?
В Python значения аргументов по умолчанию вычисляются один раз — при определении функции, а не при каждом вызове.

Значение my_list=[] создаётся один раз и сохраняется между вызовами. Это работает как статическая переменная внутри функции.

Как это исправить?
Используй None как значение по умолчанию:


def append_to_list(val, my_list=None):
if my_list is None:
my_list = []
my_list.append(val)
return my_list

print(append_to_list(1)) # [1]
print(append_to_list(2)) # [2]
print(append_to_list(3)) # [3]

💡 Вывод
Не используйте изменяемые объекты (например, list, dict, set) как значения по умолчанию для аргументов функций в Python.




@Python_Community_ru
🐍 dlt — библиотека для загрузки данных на Python. Этот open-source инструмент упрощает работу с данными — от простых скриптов до сложных ETL-пайплайнов. Автоматически определяет структуру данных и адаптируется под разные источники и хранилища.

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

🤖 GitHub (https://github.com/dlt-hub/dlt)



@Python_Community_ru
🖥 Полезный трюк в Python: как отсортировать список по нескольким условиям одновременно

Если вы хотите отсортировать список объектов (например, словарей или кортежей) сразу по нескольким критериям — например, сначала по возрасту по возрастанию, а затем по имени по убыванию — не нужно писать громоздкие функции.

Используйте sorted() с key, комбинируя несколько полей с нужной логикой сортировки. Вот как:


people = [
{"name": "Alice", "age": 30},
{"name": "Bob", "age": 25},
{"name": "Charlie", "age": 25},
{"name": "David", "age": 30},
]

# Сортировка: сначала по age (по возрастанию), затем по name (по убыванию)
sorted_people = sorted(people, key=lambda p: (p["age"], -ord(p["name"][0])))

for person in sorted_people:
print(person)


💡 Работает и с объектами, и с кортежами — главное, правильно составить key. Особенно полезно для фильтрации списков в табличных данных, при выводе результатов или генерации отчётов.

#python

Больше коротких уроков тут (https://www.youtube.com/shorts/VFmdZOYI8qc)

@Python_Community_ru
🐧 Pynguin — генератор юнит-тестов для Python. Инструмент автоматически создаёт тесты для Python-кода, экономя время разработчиков и при этом адаптирован под особенности динамической типизации Python.

Проект пока находится в стадии исследования и требует осторожности — он исполняет тестируемый код, поэтому разработчики рекомендуют использовать изолированные среды вроде Docker. Установка через pip install pynguin, минимальная конфигурация требует указания пути к проекту и модулям для тестирования.

🤖 GitHub (https://github.com/se2p/pynguin)



@Python_Community_ru
👍2
🐍 Python Gotcha: как правильно логировать необработанные исключения

В этой статье разбирают частую проблему: программа падает, но в логах — тишина. Необработанные исключения отправляются в stderr, а не в лог-файл, и вы не знаете, что пошло не так.

Пример кода:

import logging

logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
handler = logging.FileHandler("app.log")
handler.setFormatter(logging.Formatter("%(asctime)s %(name)s %(levelname)s %(message)s"))
logger.addHandler(handler)

def divide(a, b):
return a / b

def main():
logger.info("Start")
logger.info(divide(10, 0)) # ZeroDivisionError
logger.info("End")

if __name__ == "__main__":
main()


📄 В логе:



2025-07-24 12:00:00 __main__ INFO Start

А сам ZeroDivisionError — только в консоли. Лог молчит.

Решение — использовать sys.excepthook:


import sys

def handle_uncaught_exception(exc_type, exc_value, exc_traceback):
logger.critical("Uncaught exception", exc_info=(exc_type, exc_value, exc_traceback))

sys.excepthook = handle_uncaught_exception

Теперь, если произойдёт ошибка, она попадёт в лог:



CRITICAL Uncaught exception
Traceback (most recent call last):
...
ZeroDivisionError: division by zero

📌 Вывод:
— Необработанные исключения не попадут в лог, если явно не подключить sys.excepthook
— Это особенно важно в продакшене: лог покажет, где и почему всё сломалось
— Просто и надёжно

🔗 Подробнее (https://andrewwegner.com/python-gotcha-logging-uncaught-exception.html)



@Python_Community_ru