20070
Полный Дзен Пайтона в одном канале Разместить рекламу: @tproger_sales_bot Правила общения: https://tprg.ru/rules Другие каналы: @tproger_channels Сайт: https://tprg.ru/site Регистрация в перечне РКН: https://tprg.ru/xZOL
Виды компьютерных сетей
Белый хакер разложил по полочкам, какие бывают топологии систем: кольцо, шина, звезда, WLAN, WAN.
Суперпонятная статья для новичков и не только: вы точно почерпнете для себя что-то новое.
#основы
@zen_of_python
PEP 734: Параллелизм без multiprocessing
Запланировано добавление нового стандартного модуля concurrent.interpreters. Он будет управлять несколькими изолированными подинтерпретаторами внутри одного процесса.
Каждый подинтерпретатор имеет свой собственный GIL, то есть код может действительно выполняться параллельно (в отличие от обычных потоков). Нет накладных расходов на создание отдельных процессов и межпроцессное взаимодействие.
Уже сейчас доступен в виде пакета на PyPI: interpreters-pep-734, который можно использовать с Python 3.12+.
#инструмент
@zen_of_python
🙉 — Если лучше не видеть, как это работает
Разжигаем огонь... вашей страсти к Python
Проект Kindling Projects предлагает начинающим программистам идеи для небольших проектов на Python, которые достаточно просты для освоения, но при этом позволяют развивать навыки и проявлять креативность.
Сотни несложных утилит, игр, классических кодерских задач, клонов популярных сервисов и проч.
#инструмент
@zen_of_python
Плейлист по изучению питона
Вместо индусов ChatGPT / Cursor
#кек
@zen_of_python
Вопросы подписчиков
Zen of Python поддерживает новоприбывших (и не только) в особой рубрике. Как это работает:
— Спрашивайте что угодно (в комментариях под этим постом), связанное с Python. Здесь нет плохих вопросов!
— Сообщество вас поддержит. Самые интересные вопросы мы разберём в отдельном посте;
#вопросы_новичков
@zen_of_python
Несколько способов ускорить ваш код.
В реальных задачах — от обработки данных до веб-сервисов — скорость выполнения критична. Незаметные узкие места могут приводить к росту затрат на инфраструктуру и снижению качества обслуживания пользователей. Вашему вниманию эффективные способа ускорить Python — каждый из них помогает бороться с типичными источниками замедлений.
tuple вместо list
Кортежи неизменяемы: они создаются один раз, занимают фиксированную память и оптимизируются самим интерпретатором. Списки же — динамический тип: их память часто переранее выделяется, они имеют более сложную внутреннюю структуру.
Поэтому когда структура фиксирована и не требуется изменять элементы — используйте кортеж. Это существенно сэкономит память, когда речь идёт о больших объёмах данных.
set и dict вместо list при частых проверках и поисках
— Поиск x in my_list — линейная операция (O(n));
— Проверка присутствия через my_set или my_dict — это хеш-таблица (O(1));
Если вам нужна частая проверка вхождений (фильтрация или поиск), выбирайте сет или словарь. Первый предпочтителен для уникальных элементов, второй — когда нужен быстрый доступ по ключу и хранение значений.
Локальные переменные быстрее
Переменные локальной области видимости читаются быстрее, чем глобальные — это из-за особенностей функционирования интерпретатора. В циклах и функциях выносите глобальные объекты как список, словарь в локальные переменные — это ускоряет многократные обращения.
#основы
@zen_of_python
Новый инструмент для отладки асинхронных процессов
С выходом Python 3.14 beta 2 появился новый CLI-инструмент для инспекции асинхронных задач:
python -m asyncio ps 12345 # Табличный список задач для процесса с PID 12345
python -m asyncio pstree 12345 # Древовидное отображение взаимозависимых корутин
Опрос про роль ИИ в вашей работе
Редакция Tproger проводит регулярное исследование об отношении айтишников к Искусственному интеллекту. Это небольшая анкета займет не более 5 минут, но очень поможет прояснить отношение разных групп к AI. Результатами обязательно поделимся.
#опрос
@zen_of_python
Лаконичная шпора из 12 базовых команд GIT на русском 🙂
Кратко, по делу, без лишнего — самые нужные команды для повседневной работы с репозиторием.
А если нужна более расширенная подборка — загляните в наш прошлый чит-лист. Возможно даже откроете для себя что-то новое
FlareSolverr | Обходим турникет Cloudflare
Фактически эта библиотека обеспечивает вас прокси-сервером для обхода антибот-защиты. Когда приходит запрос, она использует Selenium с undetected-chromedriver для открытия вкладки Chrome. URL с параметрами пользователя открывается, задача Cloudflare решается (или истекает время ожидания). Посмотрим, сколько времени у CF уйдет на «компенсацию» такого «эксплойта».
Цена: бесплатно
Репозиторий проекта
#инструмент
@zen_of_python
А если ты путешествуешь во времени и прилетел в ДРУГОЙ ЧАСОВОЙ ПОЯС???
😎 — ненавижу их (часовые пояса)
😈 — ничего сложно в них нет
💯 — мне индифферентно
@ithumor
Мегагайд: культура работы с Git
Git — это не только (и не столько!) знание самой технологии и конкретных команд, но и определённая культура взаимодействия, практики, подходы, договорённости. Всё это помогает участникам команды лучше понимать друг друга и работать быстрее и чётче.
В статье — как раз об этом. В ней раскрыли, что формирует культуру работы с Git: от конвенций именования коммитов и до практик работы в пуллреквесте. В конце статьи — полезные ссылки на интерактивные обучалки, шпаргалки и гайды: https://habr.com/ru/companies/yandex_praktikum/articles/812139/
#git #шпаргалки
great-tables | Make Tables Great Again
Создатель этого репозитория напоминает нам, что у грамотной HTML-таблицы, помимо тела, есть еще (под)заголовок, футер и объединенные ячейки. Забытые возможности <table>...
Цена: бесплатно
Репозиторий проекта
#инструмент
@zen_of_python
Немного безумные способы определения функций
Мы привыкли определять функции с помощью ключевого слова def. Однако Python как язык куда глубже и гибче, чем может показаться на первый взгляд. Существует несколько способов создать функцию — от практичных до откровенно абсурдных.
Lambda-функции — минимализм в действииlambda позволяет создавать анонимные функции в одну строку. Это удобно, когда функция короткая и используется "на лету", например, в map() или filter(). Lambda-функции не могут содержать сложную логику или много выражений — только одно выражение, без return и вложенных блоков:
multiply_by_three = lambda x: x * 3
print(multiply_by_three(5))
functools.partialfunctools.partial можно создавать функции с уже предзаданными аргументами:
from functools import partial
def power(base, exponent):
return base ** exponent
square = partial(power, exponent=2)
print(square(5)) # 25
def print_result(fmt):
def decorator(func):
def wrapper(*args, **kwargs):
result = func(*args, **kwargs)
print(fmt.format(result))
return result
return wrapper
return decorator
@print_result("Результат: {}")
def double(x):
return x * 2
double(4)
__call____call__. Таким образом, вы можете создавать функции как объекты с состоянием:
class Greeter:
def __call__(self, name):
print(f"Hello, {name}!")
greet = Greeter()
greet("Bob")
exec()exec() выполняет строку как код Python. Да, вы можете определять функции с его помощью.
code = '''
def add(x):
return x + 10
'''
exec(code)
print(add(5)) # 15
eval()eval() — ещё один способ выполнить строку кода, но только если это выражение, а не целый блок.
add = eval("lambda x: x + 10")
print(add(3)) # 13
exec().types.new_classtypes.new_class() можно создавать callable-объекты (через `__call__`) на лету.
import types
def class_body(ns):
ns['__call__'] = lambda self, x: x * 2
DynamicFunction = types.new_class("DynamicFunction")
class_body(DynamicFunction.__dict__)
func = DynamicFunction()
print(func(6)) # 12
mutmut | Мутационные тесты
Mutation Testing — это метод, при котором в ваш исходный код вносятся небольшие изменения (мутации), и затем запускаются ваши тесты.
Цель: проверить, насколько эффективно тесты обнаруживают ошибки.
Утилита вносит мутации в ваш код (на уровне исходников), запускает ваши юнит-тесты после каждой мутации. Затем помечает мутации:
— ✅ Killed (тест поймал баг);
— ❌ Survived (мутация выжила).
Такое особенно важно, если вы работаете в сфере безопасности, финансов.
Цена: бесплатно
Репозиторий проекта
#инструмент
@zen_of_python
Еще немного форсим питонов
#кек
@zen_of_python
🙈 — Если не ожидал такого в канале про ЯП
Очаровательные комиксы от дата-сайентиста Элисон Хорст
#кек
@prog_tools
Создаём микросервис по выгодному обмену крипты
В статье вы узнаете, как создать микросервис, что анализирует предложения и подсказывает, где можно выгоднее обменять криптовалюту. Все это делается на Python, который делает запросы к API exnode.ru и сортирует результат по выгоде. Вы также увидите, как создается веб‑интерфейс + Telegram‑бот.
#api
@zen_of_python
bandit | Насколько защищен ваш проект?
Инструмент найдет «секурные прорехи» в вашем проекте, включая запушенные ключи / токены и небезопасные участки кода. Внезапно проект OpenStack — опенсорсной облачной инициативы NASA.
Репозиторий проекта
#инструмент
@zen_of_python
whatsonpypi | Ускоряем обновление зависимостей
Если при обновлении библиотек проекта вам неохота каждый раз посещать pypi.org, с помощью этой утилиты вы сможете вывести данные о крайней версии и совместимости с Python прямо в командную строку.
Репозиторий проекта
#инструмент
@zen_of_python
Хватит искать работу в одиночку!
Ты крутой айтишник, но поиск работы превращается в квест: бесконечные резюме, где важны не навыки, а кейворды, десятки собеседований и постоянный стресс. Знакомо? Всё это выматывает и демотивирует. Мы тебя понимаем — и готовы поддержать!
Команда Tproger открывает первое реалити-шоу в Телеграм о поиске работы — «Код найма».
Вместе с опытными менторами ты пройдешь все этапы найма:
➡️ Прокачаешь резюме так, чтобы его заметили
➡️ Научишься проходить собеседования без волнения
➡️ Получишь честную обратную связь от рекрутеров
➡️ И, главное, дойдёшь до оффера в компании мечты!
Весь путь будет проходить на глазах у подписчиков канала — они тоже смогут давать советы и поддерживать тебя.
Хочешь стать героем нашего реалити и получить шанс найти работу мечты?
✍️ Заполняй анкету
Мы выберем трёх участников, которым поможем пройти весь путь до оффера.
Присоединяйся к «Коду найма» — и пусть твой следующий оффер станет началом новой жизни!
Краткий гайд про хэши для новичков
Хеширование — это фундаментальная концепция в Computer Science. В основе лежит идея односторонней функции, которая принимает на вход данные произвольного размера и возвращает выход фиксированной длины. Эта функция преобразует любые данные — будь то строка, число или файл — в уникальное значение фиксированной длины, называемое хешем. Это значение представляет собой последовательность битов, которая служит своего рода «отпечатком пальца» для исходных данных:
import hashlib
hash = hashlib.sha256()
hash.update(b'hello')
hashed_string = hash.hexdigest()
print(hashed_string) # 2cf24d......8b9824
ssh-keygen -t rsa -b 4096
ssh-keygen -lf ~/.ssh/id_rsa.pub
2048 SHA256:2f3b7A5Nk...xyz username@host (RSA)
Бэкроним — это в шутку неверная расшифровка аббревиатуры.
PEP — Please Explain Python
#кек
@zen_of_python
Вопросы подписчиков
Zen of Python поддерживает новоприбывших (и не только) в особой рубрике. Как это работает:
— Спрашивайте что угодно (в комментариях под этим постом), связанное с Python. Здесь нет плохих вопросов!
— Сообщество вас поддержит. Самые интересные вопросы мы разберём в отдельном посте;
#вопросы_новичков
@zen_of_python
Сломал ногу — выучил Python: как ИИ помог экс-консультанту стать программистом за 100 дней
38-летний Эрик Леннрот после травмы решил изменить карьеру и выбрал Python, пройдя бесплатные курсы CS50 от Гарварда. С помощью ChatGPT он писал псевдокод, получал обратную связь и вручную набирал код. Его первый проект стал основой для более сложного веб-приложения из 25К строк кода. И о чудо! через три месяца он получил оффер в консалтинговой компании в Лондоне, где заменил Excel на автоматизированные пайплайны. Обучение обошлось ему в $120 (подписки на Claude Pro и Cursor).
#факт
@zen_of_python
Как работает развёртывание Python-приложений: от запроса до ответа
Зачем нужен gunicorn? А зачем — Nginx? Эти вопросы часто задают разработчики, впервые сталкивающиеся с деплоем Python-приложений. Может показаться, что веб-приложение — это просто код на Flask или Django, который запускается и принимает запросы. Но на практике между пользователем и вашим кодом выстраивается целая цепочка инфраструктурных компонентов, каждый из которых решает важную задачу. На схеме показан путь HTTP-запроса от клиента до конечного обработчика в приложении и обратно.
Accept: принимаем запрос
Когда пользователь открывает ваш сайт, он отправляет HTTP-запрос. Этот запрос в первую очередь встречается с внешним сервером — чаще всего это nginx. Его задача — понять, куда направить запрос: отдать ли статику, переписать URL, направить на конкретное приложение, или вовсе отклонить (например, по причине отсутствия авторизации). Он также может выполнять кэширование, сжатие и защищать от некоторых видов атак. Сюда же можно отнести балансировщики нагрузки и ingress-контроллеры в Kubernetes.
Translate: превращаем байты в Python
Следующий этап — перевод сетевого запроса в то, что понимает ваше Python-приложение. Это задача gunicorn или аналогичных серверов, поддерживающих WSGI (или ASGI, если речь о FastAPI и асинхронных приложениях). gunicorn создаёт рабочие процессы, слушает сокет, принимает соединения от nginx и передаёт их дальше в код Python. Он изолирует логику приложения от низкоуровневой сетевой части и обеспечивает масштабируемость.
Process: бизнес-логика и генерация ответа
Завершающий этап — сам Python-код во фреймворке (Django, Flask, FastAPI и пр.). Здесь выполняются проверки, обращения к БД, формируются HTML-страницы или JSON-ответы. Именно здесь происходит «магия» — добавление ценности, решение задач пользователей и реализация бизнес-логики.
#факт #основы
@zen_of_python
👀 — Если пришлось перечитать три раза