Zen of Python
20.1K subscribers
1.21K photos
161 videos
32 files
3.16K links
Полный Дзен Пайтона в одном канале

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

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

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

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

Регистрация в перечне РКН: https://tprg.ru/xZOL
Download Telegram
🌚 — все равно перепишу, ад зависимостей — потомкам
🕊️— готов к такому
🗿— bash'ем не занимаюсь
🗿55🕊23🌚151❤‍🔥1
​​Как сжимают zlib + 3 конкурента

Реддитор провёл бенчмарк четырёх архивирующих библиотек — zlib, lz4, brotli, zstandard на коэффициент сжатия, скорость компрессии / декомпрессии.

Вот результат по первому показателю:

| Библиотека | Сжатие, разы |
|------------|--------------|
| zlib     | 27.84     |
| lz4     | 18.23     |
| brotli    | 64.78     |
| zstandard  | 43.42     |

Остальные «пьедесталы» плюс данные о дизайне экспериментов в треде. Сжимали .json.

#факты

@zen_of_python
👍3
Задача о подстроке

Получаем две строки s и t . Напишите функцию проверки: является ли s подстрокой t.

Подстрока формируется из исходной строки путём удаления некоторых символов (может быть, ни одного) без нарушения положения остальных. "ace" является подстрокой "abcde", а "aec" — нет.

Ограничения:


0 <= len(s) <= 100
0 <= len(t) <= 10^4


s и t состоят только из строчных английских букв.

В качестве теста:


s = "abc"
t = "ahbgdc"

>>> is_substring(s, t)
... true


#задача

@zen_of_python
👍21🍌1
​​OpenTelemetry: здоровье вашего py-приложения

Доступный англоязычный гайд по настройке телеметрии вашего проекта. Инструмент позволяет:
— собирать логи;
— отслеживать исполнение запросов;
— прослеживать путь конкретного тестового запроса (чтобы найти «бутылочные горлышки»);
— отправлять уведомления о событиях в мессенджер;
— распределенно отслеживать в условиях нескольких микросервисов и проч.

#лучшиепрактики

@zen_of_python
🍌3
Поздравляем победителей

Задачу об инверсии строки верно решили:

— Cool and Fun Python (@Python3k);
— Лев Выскубов;
@sidor0912;
@lomserman;
@HackingSection;
@VasilTerekin (засчитываю, хотя запрошена функция);
@patriarch_chesslovo;
@IvanImmortal;
@Sentiago.

Кратчайшие верные решения предложили @patriarch_chesslovo:


VOWELS_LOWERCASE = set('aeoiuаоыуэяёиюе')

def invert_vowels(strng):
  reversed_vowels = (i for i in strng[::-1] if i.lower() in VOWELS_LOWERCASE)
  return ''.join([i if i.lower() not in VOWELS_LOWERCASE else next(reversed_vowels) for i in strng])


и @HackingSection:


def invert_vowels(s, vowels = "аяоёиыуюеэ"):
  vowelsInText = [j for j in s if j in vowels]
  return [vowelsInText.pop(-1) if i in vowels else i for i in s]


Отдельный респект Cool and Fun Python за разбор своего решения:


Предполагается, что все буквы в тексте строчные и русские. Иначе требуется доработать строку гласных.

У решения линейная асимптотика. Но если очень хочется, можно повысить быстродействие, превратив vowels в множество строк односимвольников: vowels = {'а', 'я', ...}

И преобразование строки в список и обратно - вынужденная мера. Строка в Python неизменяемая. Впрочем, на сохранение асимптотики O(N) это не влияет.

Кстати, если бы постановщик задачи гарантировал наличие гласных (всё же предлоги "в", "с" тоже считаются словами), можно было бы убрать проверки left < right в двух внутренних циклах.


Отдельная благодарность @lomserman за создание тестирующей функции:


def test(original: str, expected: str):
  result = invert_vowels(original)
  print(result)
  assert result == expected


p.s. Админ подписывается на всех ребятушек, что решают задачи. Если «провалиться» в профили решивших, там полно питонической годноты.

#задача

@zen_of_python
🔥6🍌21
​​Фейковые техинтервью и трояны

Если верить статье с xakep.ru, группа корейских IT-компаний приглашает на собеседование на должность фулстэк-разработчика, и под эгидой демонстрации навыков просят клонировать и использовать репозиторий Dev Popper — якобы NPM-расширение.

На деле же при запуске активируется обфусцированный js-скрипт, который в итоге запускает py-скрипт (!) — троян, собирающий:
— данные для входа на ваши сервера;
— историю CLI-команд (ищет креды, опять же);
— возможности для дистанционного развёртывания вредоносного ПО.

Коллеги, с корейскими компаниями пока на собеседования не ходим.

#факты

@zen_of_python
😁18🌚1🍌1
Инженер-программист, помни!

Если ты всей душой в майских праздниках, то эксперименты с «пивным» пиком Балмера никто не отменял.

«Каким-то образом Балмер посчитал, что 1,29–1,38‰ алкоголя в крови открывают у него сверхчеловеческие способности к программированию: он выпивал пару литров пива, входил в состояние лёгкого опьянения и мог продуктивно кодить».

Ну если сверхкода в таком состоянии все же не написать, то за «жабистые» таски точно легче браться.

#кек

@zen_of_python
👍146
​​tkforge: из Figma в Tkinter

Интересная коллекция компонентов, позволяющая сверстать на канвасе небезызвестной Figma интерфейс, а потом командной строкой перегнать это сразу в Python-код для Tkinter.

#библиотека

@zen_of_python
👌8🔥2
​​Сложность структур данных и алгоритмов

Если вы подступились к объёмным данным в проекте, самое время задуматься: а те ли методы и функции вы используете? Какова будет скорость интерпретации и не «повесится» ли программа вообще?

На pythonmorsels.com опубликовали англоязычную статью на 9 минут про виды сложностей (они на графике ниже), и про сравнение встроенных методов списков, очередей (queue), словарей, сетов, класса-счётчика (Counter), кучи и других структур. Самое оно, чтобы аккуратно вьехать в стадию оптимизации своего кода.

Если вам нужно сначала разобраться с понятием Time Complexity, вот доступная статья от основателя Типичного программиста.

#лучшиепрактики

@zen_of_python
👍1
​​Как в одно слово назвать Django-разработчика?

🏆— Джангист
🦄 — Джангер
👀 — Джангэстро
🌚 — Свое (поделитесь в комментариях)
🏆31👀9🦄9👍2🌚2
​​Вопрос от подписчика

Задает @Scotch_flip:

"Здравствуйте, у меня такой вопрос:
с помощью tkinter создал окно с кнопками от 1 и до 25, хочу сделать при нажатии кнопки с command меня[ть] цвет рандомно выбранных чисел или же по очереди меня[ть] цвет каждой кнопки , пробовал много разных способов, но увы".

! Пожалуйста, будьте взаимовежливы. Всем нам нужно место, где окажут помощь.

@zen_of_python
​​Вопросы от новичков

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

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

#вопросыновичков

@zen_of_python
​​Вопрос от подписчика

Задает @deigumnov:

"Есть ли пример кода, который взаимодействует с апач кафкой - может послать сообщение, вычитать что есть сейчас, посмотреть сколько в очереди и т.п."

! Пожалуйста, будьте взаимовежливы. Всем нам нужно место, где окажут помощь.

@zen_of_python
🎉3
🔥5🍌1
Время лечит, однако
7🍌1
​​PkgInspect: улучшенный менеджмент зависимостей

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

— PkgInspect отдаёт информацию о версиях зависимостей;
— PkgVersions сравнивает версии разных виртуальных сред и даёт массово обновляться;
— PkgMetrics отдаёт стату os про тот или иной инструмент.

Проект на GitHub

@zen_of_python
😁3🍌2
Задача о клумбе

У вас есть длинная клумба, на которой часть слотов занята, часть нет. Цветы нельзя сажать на соседних слотах. Вам подаётся список целочисленных значений, где 0 – пустой, а 1 — занятый слот.

Создайте функцию is_fitting(), которая возвращает true, если на клумбе можно посадить n новых цветов по правилу свободных соседних слотов.

Для теста:


flowerbed = [1,0,0,0,1]
>>> is_fitting(flowerbed, 1)
... True
>>> is_fitting(flowerbed, 2)
... False


@zen_of_python
👍3🎉1🍌1
This media is not supported in your browser
VIEW IN TELEGRAM
portr — аналог ngrok для команды

Это решение позволяет создавать локальные соединения http / tcp / websocket. Дружит с Cloudflare по части SSL-сертификатов, даёт грамотно инспектировать. На видео консоль администратора, позволяющая шерить проект с коллегами.

Проект на GitHub

#инструмент

@zen_of_python
👍2🍌1
Поздравляем победителей

Задачу о подстроке верно решили:

@GeorKu;
@StSav012;
@IPyth0n (@X_Python);
@stalker1337;
@HackingSection;
@Shihiyev;
@sidor0912
@patriarch_chesslovo.

Кратчайшие верные решения предложили @HackingSection:


def is_substring(s, t, nxt = 0):
  return len(s) == [nxt := nxt + 1 for i in t if i == s[nxt]][-1]


и @SmirnGreg:


def is_substring(s: str, t: str):
  return bool(re.match('.*' + '.*'.join(s) + '.*', t)) 


Отдельное спасибо @SmirnGreg за замер скорости исполнения функций (!)

NB! Учитывайте повторяющиеся буквы в подстроке s. Для некоторых решений следующая пара строк отдаёт True, что явно неверно:


s = "agggc"
t = "cgxggxxgxxa"


Присоединяйтесь: раз в неделю задачу решить — это вполне оптимальная нагрузка для занятого кодера.

#задача

@zen_of_python
👍51❤‍🔥1🔥1😁1
​​socket | Пусть ОС сама выбирает порт

Если вы пишете веб-приложения, то наверняка хотя бы раз сталкивались с «портовой путаницей» (стандартный 8000 занят, значит, выбираем 4040, а потом будь что будет). В немаленьком англоязычном лонгриде Кристоф Шисль разбирается, как упростить себе эту задачу с помощью библиотеки socket и псевдорандомизации.

#библиотека

@zen_of_python
👍5🍌1