Zen of Python
20.1K subscribers
1.29K photos
179 videos
36 files
3.3K links
Полный Дзен Пайтона в одном канале

Разместить рекламу: @tproger_sales_bot

Правила общения: https://tprg.ru/rules

Другие каналы: @tproger_channels

Сайт: https://tprg.ru/site

Регистрация в перечне РКН: https://tprg.ru/xZOL
Download Telegram
Почему Python так популярен в 2025-м году?

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


Что делает Python таким популярным?

🔘Легкость старта и понятный синтаксис
Одним из главных преимуществ с момента создания остаётся его читаемость и простота — код Python часто выглядит ближе к псевдокоду, чем к «машинной» записи. Это позволяет разработчикам сосредоточиться на логике, а не на деталях синтаксиса. Для новичков это часто первый язык программирования, с которым они знакомятся, — из-за низкого порога входа. Этот «эффект знакомства» закрепляет Python как язык выбора, особенно в образовательной и научной среде.

🔘Ключевая роль в AI, ML и науке о данных
Python давно прочно обосновался в экосистеме машинного обучения, искусственного интеллекта и обработки данных. В отчёте JetBrains «The State of Python 2025» указано, что примерно 41% разработчиков используют Python специально для задач машинного обучения. Широкий набор библиотек и фреймворков: PyTorch, TensorFlow, Keras, scikit-learn, Hugging Face Transformers — все они предоставляют зрелые, постоянно развивающиеся инструменты для исследователей и продакшн-инженеров.

🔘Универсальность: от скриптов до крупных систем
Python используется в самых разнообразных задачах:
— Веб-разработка: популярные фреймворки (Django, Flask, FastAPI) позволяют строить как простые приложения, так и масштабные сервисы;
— Автоматизация и инфраструктурные скрипты: благодаря лёгкости запуска, большому выбору библиотек и встроенной поддержке многих протоколов и форматов;
— Инструменты разработки, прототипы, доказательство концепции (POC): Python часто выбирают тогда, когда нужно быстро создать рабочее решение и проверить идею;
— Научные вычисления и инженерные задачи: благодаря библиотекам как NumPy, SciPy, Sympy и др.

Такой спектр применения делает Python «языком на все случаи», что снижает риск переключения на другой язык при росте проекта.

🔘Сообщество, документация и экосистемный эффект
Невозможно недооценивать роль сообщества в успехе Python:
— Огромное количество библиотек и фреймворков, созданных сообществом, часто с открытым исходным кодом;
— Качественная документация, туториалы, обсуждения: многие проблемы уже задокументированы, многие вопросы обсуждены на форумах, в блогах и на Stack Overflow.

Эффект «чем больше пользователей — тем больше инструментов — тем больше новых пользователей»: эта положительная обратная связь укрепляет позиции языка.

🔘Совместимость, обратная совместимость и эволюция
Python исторически стремится к обратной совместимости: код, написанный на старых версиях, часто может работать на новых с минимальными правками. Это снижает «технический долг» и барьеры для обновлений. К тому же новые версии языка приносят прирост производительности и оптимизации без значительного изменения синтаксиса. В отчёте указано, что многие разработчики просто не меняют версии, потому что текущая версия «удовлетворяет все нужды» — 53%.

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

#факт
@zen_of_python
Please open Telegram to view this post
VIEW IN TELEGRAM
2
​​Logly | loguru на Rust

Python-библиотека для логирования всего и вся. Те же уровни логирования (TRACE, DEBUG, INFO, SUCCESS и проч.), тот же отлов исключений. Создатели обещают повышенную безопасность памяти, неблокирующие конкуррентные операции и все тонкие настройки, как у loguru.

Доступен в РФ: да
Цена: бесплатно
@prog_tools
Python 3.14 на 27% быстрее предшественников

Сразу после выхода этой минорной версии языкового пакета с поддержкой free-threading (многопоточности без глобальной блокировки GIL), один разработчик провел тесты скорости. В подборку сравнения попали CPython 3.9–3.14, PyPy 3.11, Node.js 24 и Rust 1.9. Их сравнивали при рекурсивном вычислении чисел Фибоначчи и сортировке пузырьком. Подробнее о результатах в статье.

#факт
@zen_of_python
🔥82❤‍🔥1
​​Чтобы не скрипеть, как скелет из Minecraft

Суставы — штука коварная. Пока всё ок, о них никто даже не вспоминает. А потом вдруг — щёлк, хруст и боль. Конечно, всегда лучше посоветоваться с врачом, но вот базовая еда, которая точно не окажется лишней для суставов:

— Жирная рыба — уменьшает воспаления, помогает суставам двигаться мягче.

— Яйца и печень — важны для прочного хряща.

— Желатин, холодец, бульоны — источник коллагена.

— Смородина, киви, перец — витамин C, который помогает восстанавливать ткани.

— Оливковое масло, орехи — убирают микровоспаления.

— Сыры и другие источники кальция — укрепляют кости, а с ними и суставы.

#суставы #еда
2🤣1
​​pypiplus.com | Прогнозируем «ад зависимостей»

Утилита позволяет пробить любую библиотеку / фреймворк с pypi.org и узнать, от каких «соседей» она зависит и кто полагается на нее. Если в эпоху ИИ-копайлотов мы все немного превращаемся в системных архитекторов, то с такими сервисами это будет проходить с меньшим количеством последствий, однозначно.

#инструмент
@zen_of_python
This media is not supported in your browser
VIEW IN TELEGRAM
PySCN | Cтатанализ вашего кода

Инструмент оценивает Python-проект по следующим параметрам:
— доля «мертвого» кода;
— задвоение кода;
— связанность классов друг с другом и проч.

В эпоху LLM-копайлотов анализ качества кода все так же актуален, так что сохраняем и пользуемся.

#инструмент
@zen_of_python
7👀1
This media is not supported in your browser
VIEW IN TELEGRAM
The Farmer Was Replaced | Питонический симулятор фермы

На Steam релизнули необычную игру: вам предстоит создавать Python-код для дрона, чтобы тот поливал, пропалывал, копал и собирал. Довольно симпатичный UI, самое то позалипать на выходных.

#кек #обучение
@zen_of_python
🔥14👍5
Вопросы подписчиков

Zen of Python поддерживает новоприбывших (и не только) в особой рубрике. Как это работает:

— Спрашивайте что угодно (в комментариях под этим постом), связанное с Python. Здесь нет плохих вопросов!
— Сообщество вас поддержит. Самые интересные вопросы мы разберём в отдельном посте.

#обсуждение
@zen_of_python
1
​​Когда джунам объясняют, что с программирование с GPT похоже на работу системного архитектора

#кек
@zen_of_python
👍4
Media is too big
VIEW IN TELEGRAM
Как ощущается преподавание Python детям
#кек
@zen_of_python
​​Что триггерит твоего батю, когда ты говоришь, что учишь питон:
#кек
@zen_of_python
🔥1🌚1🌭1
​​Шпаргалка Pandas

Markdown-документ с листингом основных функций этого популярного фреймворка про:
— импорт / экспорт данных;
— просмотр и анализ датафрейма;
— фильтрацию;
— группировку;
— объединение;
— статистику и проч.

#шпаргалка
@zen_of_python
👍1👎1
Как писать docstrings

Докстринги (буквально «строки документации») — это встроенная в код документация (обычно после инициализации функции / класса и прочих объектов между двумя '''), которую могут читать люди и инструменты (help(), pydoc, автогенераторы). В этом лонгриде мы разберемся, где и как их писать.


Зачем нужны docstrings — и чем они отличаются от комментариев

🔘Комментарии (#) объясняют реализацию и помогают разработчикам; интерпретатор их игнорирует.
🔘Докстринги — это строковые литералы (обычно в """`), помещённые сразу после определения модуля / функции / класса / метода; они сохраняются в атрибуте .__doc__` и доступны в рантайме (через .__doc__, help() и инструментах вроде pydoc.

Докстринги описывают интерфейс (что делает код, какие аргументы и что возвращает), а комментарий — реализацию и все остальное.

Многострочные докстринги используются когда нужно подробнее описать параметры, поведение, побочные эффекты, примеры использования. По PEP 257 закрывающие кавычки обычно ставят на отдельной строке в многострочном docstring:


def get_book(publication_year, title):
"""
Retrieve a Harry Potter book by its publication year and name.

Parameters:
publication_year (int): The year the book was published.
title (str): The title of the book.

Returns:
str: A sentence describing the book and its publication year.
"""



Чтобы получить доступ к docstring в коде и терминале, вызываем:

🔘 obj.__doc__ — возвращает сырой docstring (часто краткий);
🔘 help(obj) — даёт структурированный вывод, полезный для модулей и классов;
🔘 python -m pydoc module — позволяет просматривать документацию из терминала и генерировать статичные страницы.


Что писать в docstring для модулей, функций и классов

Модуль:
🔘 Краткое описание назначения модуля.
🔘 При необходимости — описание экспортируемых переменных/классов/функций, примеры использования.

Функция / метод:
🔘 Краткое резюме (1–2 предложения).
🔘 Секция Parameters`/`Args: имена параметров, типы, краткое описание.
🔘 Секция Returns / Yields: что возвращается, тип.
🔘 Исключения: какие ошибки может выбросить функция (опционально, но полезно).
🔘 Пример использования или заметки о поведении (если нужно).

Класс:
🔘 Краткое описание назначения класса.
🔘 Описание атрибутов (публичных), краткая информация о методах (если интерфейс не очевиден).
🔘 Для сложных иерархий — примеры создания/использования. ([realpython.com][1])

#основы
@zen_of_python
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍1
Вайсфельд М. Объектно-ориентированный подход. 5-е издание

Классическая книга для целого семейства языков вроде Python. Читать будет непросто, ведь там может встретиться глава про SOLID с примерами на C++, однако это наилучший способ понять философию создателей таких языков. Начинающим такое советовать, наверное, не стоит, но если вы уже погружались в горнило разработки и выпуска ПО в прод, то книга точно сделает из вас лучшего специалиста.

#книга
@zen_of_python
1👎1
This media is not supported in your browser
VIEW IN TELEGRAM
Python митап от Авито 27 октября в Москве!

Вечером 27 октября вас ждут в офисе на Лесной, чтобы обсудить:

кейс оптимизации GC в Python от Саши Федосеева, backend-инженера из команды Main Page Tech Авито;
как mypy укрощает Python в большой компании вместе с Сергеем Яхницким из Яндекса.

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

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

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

Это #партнёрский пост
Please open Telegram to view this post
VIEW IN TELEGRAM
1
​​Не триггеримся: как унять головную боль

Когда питаться обезболом не хочется, а парить стопы не к месту. Когда-то точно понадобится, сохраняйте:

Выйди на воздух, разомни шею и плечи. Часто этого хватает.
Промни затылок пальцами — напряжение уходит вместе с болью.
Если пульсирует — закрой шторы, посиди в тишине, без раздражителей.
Холод к лбу, тепло к шее — старый, но рабочий трюк.
Выпей воды, перекуси, сядь ровно. Базовые вещи спасают чаще, чем кажется.
Убери экран, дай глазам отдохнуть.
– Если не отпускает — проверь давление или другие очевидные причины.
5
Что вы чувствуете, когда осознаете, что текст написан GPT?
Anonymous Poll
48%
Отношусь нейтрально
35%
Терпеть не могу нагенеренное
9%
Не вижу разницы
8%
Другое
👏1🌚1
Зачем нужны «ленивые» (lazy) импорты

Когда модуль импортируется, интерпретатор выполняет весь код на глобальном уровне этого модуля, включая все его собственные импорты и инициализации. В больших приложениях и тестовых наборах это может заметно замедлять запуск и фазу сбора тестов. Поэтому идея «ленивого импорта» — откладывать импорт «тяжёлых» зависимостей до момента, когда они действительно понадобятся — помогает улучшить отзывчивость приложения и сократить время тестирования.


Переносим import внутрь функции

Самый очевидный и безопасный способ сделать импорт ленивым — переместить import из глобальной области видимости внутрь функции или метода, где ресурс реально используется. При таком подходе импорт произойдёт только при первом вызове этой функции (и далее кешируется в sys.modules, поэтому реальной «повторной» загрузки не происходит). Это даёт быстрый выигрыш для модулей, которые редко используются или инициализируют тяжёлые зависимости:


def do_heavy_task():
import heavy_lib
heavy_lib.run()


Плюсы: простота. Минусы: если импорт нужен во многих местах, придётся либо дублировать import (что допустимо), либо устанавливать глобальную переменную после первого импорта.


Вариант с importlib — когда нужно контролировать пространство имён

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

Пример:


from importlib import import_module

def use_feature():
mod = import_module("heavy_lib")
mod.do()



Как найти «тяжёлые» импорты — инструмент `python -X importtime

Прежде чем делать импорты ленивыми, полезно понять, что именно тормозит загрузку. Для этого есть встроенная опция: python -X importtime your_program.py — она выводит дерево импорта с временами, позволяя увидеть самые затратные узлы. Это особенно полезно при оптимизации большого проекта или ускорении фазы сбора тестов.


Особая зона внимания — pytest и фаза collection

Pytest во время collection импортирует все тестовые файлы — следовательно, импорты в глобальной области тестов будут исполнены на этапе collection, даже если сам тест не будет запущен. Это распространённый источник задержек в больших тестовых наборах. Решение — переносить импорты внутрь тестовых функций, использовать importlib внутри тестов.


«Глобальный» трюк

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


# module.py
heavy = None

def first_use():
global heavy
if heavy is None:
import heavy_lib
heavy = heavy_lib
heavy.do()



Когда ленивые импорты — плохая идея

🔘 Если импорт жизненно важен для модуля и должен бросать ошибки во время старта (fail fast), откладывание импорта может скрыть проблему до момента выполнения, что усложнит отладку.
🔘 Когда импорт идёт с побочными эффектами, которые вы ожидаете увидеть при импортировании модуля — откладывая импорт, вы меняете поведение.

#основы
@zen_of_python
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1