This media is not supported in your browser
VIEW IN TELEGRAM
Кто-то сделал бесплатный PDF-редактор, который делает всё то же, что и Adobe, но занимает всего 20 МБ.
RevPDF работает полностью локально на устройстве. Позволяет редактировать текст и изображения, подписывать документы, редактировать конфиденциальные данные, сжимать файлы, конвертировать в Word — без интернета, без аккаунта и без подписки.
Полностью бесплатно. Полностью офлайн.
👉 @PythonPortal
RevPDF работает полностью локально на устройстве. Позволяет редактировать текст и изображения, подписывать документы, редактировать конфиденциальные данные, сжимать файлы, конвертировать в Word — без интернета, без аккаунта и без подписки.
Полностью бесплатно. Полностью офлайн.
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔19❤8👍4😢1
7 обязательных сложностей алгоритмов (Big-O) для собеседований:
1. 𝐎(1) — 𝐤𝐨𝐧𝐬𝐭𝐚𝐧𝐭𝐧𝐚𝐲𝐚 𝐬𝐥𝐨𝐳𝐡𝐧𝐨𝐬𝐭𝐢
- Время выполнения не зависит от размера входных данных.
- Пример: доступ к элементу массива по индексу.
2. 𝐎(𝐥𝐨𝐠 𝐧) — 𝐥𝐨𝐠𝐚𝐫𝐢𝐟𝐦𝐢𝐜𝐡𝐞𝐬𝐤𝐚𝐲𝐚 𝐬𝐥𝐨𝐳𝐡𝐧𝐨𝐬𝐭𝐢
- Время растёт медленно при увеличении входа. Обычно встречается в алгоритмах, которые делят задачу пополам на каждом шаге.
- Пример: бинарный поиск в отсортированном массиве.
3. 𝐎(𝐧) — 𝐥𝐢𝐧𝐞𝐲𝐧𝐚𝐲𝐚 𝐬𝐥𝐨𝐳𝐡𝐧𝐨𝐬𝐭𝐢
- Время растёт линейно относительно размера входных данных.
- Пример: поиск элемента в массиве перебором.
4. 𝐎(𝐧 𝐥𝐨𝐠 𝐧) — 𝐥𝐢𝐧𝐞𝐲𝐧𝐨-𝐥𝐨𝐠𝐚𝐫𝐢𝐟𝐦𝐢𝐜𝐡𝐞𝐬𝐤𝐚𝐲𝐚 𝐬𝐥𝐨𝐳𝐡𝐧𝐨𝐬𝐭𝐢
- Время растёт чуть быстрее линейного. Обычно включает логарифмическое число операций на каждый элемент.
- Пример: сортировка quick sort или merge sort.
5. 𝐎(𝐧^2) — 𝐤𝐯𝐚𝐝𝐫𝐚𝐭𝐢𝐜𝐡𝐞𝐬𝐤𝐚𝐲𝐚 𝐬𝐥𝐨𝐳𝐡𝐧𝐨𝐬𝐭𝐢
- Время растёт пропорционально квадрату входа.
-Пример: bubble sort, где происходит сравнение и возможный swap каждой пары элементов.
6. 𝐎(2^𝐧) — 𝐞𝐤𝐬𝐩𝐨𝐧𝐞𝐧𝐭𝐬𝐢𝐚𝐥𝐧𝐚𝐲𝐚 𝐬𝐥𝐨𝐳𝐡𝐧𝐨𝐬𝐭𝐢
- Время удваивается с каждым новым элементом входа. Такие алгоритмы быстро становятся непригодными для больших данных.
- Пример: генерация всех подмножеств множества.
7. 𝐎(𝐧!) — 𝐟𝐚𝐤𝐭𝐨𝐫𝐢𝐚𝐥𝐧𝐚𝐲𝐚 𝐬𝐥𝐨𝐳𝐡𝐧𝐨𝐬𝐭𝐢
- Время пропорционально факториалу размера входа.
- Пример: генерация всех перестановок множества.
👉 @PythonPortal
1. 𝐎(1) — 𝐤𝐨𝐧𝐬𝐭𝐚𝐧𝐭𝐧𝐚𝐲𝐚 𝐬𝐥𝐨𝐳𝐡𝐧𝐨𝐬𝐭𝐢
- Время выполнения не зависит от размера входных данных.
- Пример: доступ к элементу массива по индексу.
2. 𝐎(𝐥𝐨𝐠 𝐧) — 𝐥𝐨𝐠𝐚𝐫𝐢𝐟𝐦𝐢𝐜𝐡𝐞𝐬𝐤𝐚𝐲𝐚 𝐬𝐥𝐨𝐳𝐡𝐧𝐨𝐬𝐭𝐢
- Время растёт медленно при увеличении входа. Обычно встречается в алгоритмах, которые делят задачу пополам на каждом шаге.
- Пример: бинарный поиск в отсортированном массиве.
3. 𝐎(𝐧) — 𝐥𝐢𝐧𝐞𝐲𝐧𝐚𝐲𝐚 𝐬𝐥𝐨𝐳𝐡𝐧𝐨𝐬𝐭𝐢
- Время растёт линейно относительно размера входных данных.
- Пример: поиск элемента в массиве перебором.
4. 𝐎(𝐧 𝐥𝐨𝐠 𝐧) — 𝐥𝐢𝐧𝐞𝐲𝐧𝐨-𝐥𝐨𝐠𝐚𝐫𝐢𝐟𝐦𝐢𝐜𝐡𝐞𝐬𝐤𝐚𝐲𝐚 𝐬𝐥𝐨𝐳𝐡𝐧𝐨𝐬𝐭𝐢
- Время растёт чуть быстрее линейного. Обычно включает логарифмическое число операций на каждый элемент.
- Пример: сортировка quick sort или merge sort.
5. 𝐎(𝐧^2) — 𝐤𝐯𝐚𝐝𝐫𝐚𝐭𝐢𝐜𝐡𝐞𝐬𝐤𝐚𝐲𝐚 𝐬𝐥𝐨𝐳𝐡𝐧𝐨𝐬𝐭𝐢
- Время растёт пропорционально квадрату входа.
-Пример: bubble sort, где происходит сравнение и возможный swap каждой пары элементов.
6. 𝐎(2^𝐧) — 𝐞𝐤𝐬𝐩𝐨𝐧𝐞𝐧𝐭𝐬𝐢𝐚𝐥𝐧𝐚𝐲𝐚 𝐬𝐥𝐨𝐳𝐡𝐧𝐨𝐬𝐭𝐢
- Время удваивается с каждым новым элементом входа. Такие алгоритмы быстро становятся непригодными для больших данных.
- Пример: генерация всех подмножеств множества.
7. 𝐎(𝐧!) — 𝐟𝐚𝐤𝐭𝐨𝐫𝐢𝐚𝐥𝐧𝐚𝐲𝐚 𝐬𝐥𝐨𝐳𝐡𝐧𝐨𝐬𝐭𝐢
- Время пропорционально факториалу размера входа.
- Пример: генерация всех перестановок множества.
Please open Telegram to view this post
VIEW IN TELEGRAM
🤣22👍10❤5🏆4
Лёгковесный автономный AI-агент на Python с поддержкой нескольких моделей и множества инструментов, может заменить Claude Code и работает локально: https://github.com/KevRojo/Dulus
Автономный AI-агент, написанный на 12 000 строк Python-кода, с поддержкой 11 провайдеров моделей, между которыми можно переключаться по необходимости, и 27 встроенными инструментами. Поддерживает протокол MCP, горячую загрузку плагинов, параллельную работу саб-агентов, офлайн-голосовой ввод/вывод и интеграцию с Telegram (Telegram-bridge).
👉 @PythonPortal
Автономный AI-агент, написанный на 12 000 строк Python-кода, с поддержкой 11 провайдеров моделей, между которыми можно переключаться по необходимости, и 27 встроенными инструментами. Поддерживает протокол MCP, горячую загрузку плагинов, параллельную работу саб-агентов, офлайн-голосовой ввод/вывод и интеграцию с Telegram (Telegram-bridge).
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍11❤3
Пишешь объектно-ориентированный Python? Не путай два базовых типа отношений:
1/ has-a («композиция»). Один объект содержит другой. У
2/ is-a («наследование»). Один класс является разновидностью уже существующего.
👉 @PythonPortal
1/ has-a («композиция»). Один объект содержит другой. У
Person есть (has-a) name. У Car есть (has-a) color.2/ is-a («наследование»). Один класс является разновидностью уже существующего.
Employee — это (is-a) Person. Car — это (is-a) Vehicle.Please open Telegram to view this post
VIEW IN TELEGRAM
1👍11❤5
Хостинг за 199 рублей/месяц. Бесплатные модели AI и навороченные агенты для создания любых веб-приложений, сайтов, интернет-магазинов, телеграмм-ботов. И все это можно оплатить картой РФ.
easyapps — сервис созданный инженерами, а не маркетолагами.
У сервиса мгновенная техническая поддержка и фриланс, если кому-то хочется чтобы даже вайбкодингом занимались вместо него.
Попробовать можно на https://easyapps.click
easyapps — сервис созданный инженерами, а не маркетолагами.
У сервиса мгновенная техническая поддержка и фриланс, если кому-то хочется чтобы даже вайбкодингом занимались вместо него.
Попробовать можно на https://easyapps.click
🤣9👍2🌭2❤1😁1
Компании, которые увольняют программистов и направляют деньги на ИИ выглядят примерно так
👉 @PythonPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
❤56😁20👍8
Тернарный оператор в Python — удобная штука, но им легко злоупотребить:
То, что это можно написать, ещё не значит, что так стоит писать.
Если условий 3 и больше — лучше использовать
А тернарный оператор стоит оставить для:
comprehensions (генераторов списков / коллекций),
👉 @PythonPortal
'A' if s>=90 else 'B' if s>=80 else 'C' if s>=70 else 'F'
То, что это можно написать, ещё не значит, что так стоит писать.
Если условий 3 и больше — лучше использовать
if-elif-else.А тернарный оператор стоит оставить для:
comprehensions (генераторов списков / коллекций),
lambda-выражений, return в одну строку.Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤1👀1
Регулярные выражения в python
Регулярные выражения (regex) в Python используются для поиска, соответствия и манипулирования строками на основе шаблонов. В Python регулярные выражения реализованы в модуле
Основные функции модуля re:
🔸
🔸
🔸
🔸
🔸
🔸
Примеры использования:
Объяснение примера:
>
>
>
>
>
>
Дополнительные примеры шаблонов:
Регулярные выражения мощный инструмент для работы с текстом, и они могут быть полезны в самых разных задачах, от простой проверки ввода до сложного парсинга текста.💊
👉 @PythonPortal
Регулярные выражения (regex) в Python используются для поиска, соответствия и манипулирования строками на основе шаблонов. В Python регулярные выражения реализованы в модуле
reОсновные функции модуля re:
re.match(): Проверяет, соответствует ли начало строки заданному шаблону.re.search(): Ищет шаблон в строке и возвращает первый найденный совпадающий объект.re.findall(): Находит все совпадения шаблона в строке и возвращает их в виде списка.re.finditer(): Находит все совпадения шаблона и возвращает их в виде итератора.re.sub(): Заменяет все совпадения шаблона на заданную строку.re.split(): Разделяет строку по заданному шаблону.Примеры использования:
import re
# Пример строки
text = "The rain in Spain falls mainly in the plain."
# 1. re.match()
match = re.match(r'The', text)
if match:
print("Match found:", match.group())
else:
print("No match found")
# 2. re.search()
search = re.search(r'rain', text)
if search:
print("Search found:", search.group())
else:
print("No search found")
# 3. re.findall()
findall = re.findall(r'in', text)
print("Findall results:", findall)
# 4. re.finditer()
finditer = re.finditer(r'in', text)
for match in finditer:
print("Finditer match:", match.group(), "at position", match.start())
# 5. re.sub()
substitute = re.sub(r'rain', 'snow', text)
print("Substitute result:", substitute)
# 6. re.split()
split = re.split(r'\s', text)
print("Split result:", split)
Объяснение примера:
>
re.match(r'The', text): Проверяет, начинается ли строка text с "The".>
re.search(r'rain', text): Ищет первое вхождение "rain" в строке text.>
re.findall(r'in', text): Находит все вхождения "in" в строке text.>
re.finditer(r'in', text): Возвращает итератор, который перебирает все вхождения "in" в строке text.>
re.sub(r'rain', 'snow', text): Заменяет все вхождения "rain" на "snow" в строке text.>
re.split(r'\s', text): Разделяет строку text по пробелам (символы пробела).Дополнительные примеры шаблонов:
\d: Любая цифра.\D: Любой символ, кроме цифры.\w: Любая буква, цифра или символ подчеркивания.\W: Любой символ, кроме буквы, цифры или символа подчеркивания.\s: Любой пробельный символ.\S: Любой непробельный символ..: Любой символ, кроме новой строки.^: Начало строки.$: Конец строки.*: 0 или более повторений.+: 1 или более повторений.?: 0 или 1 повторение.{n}: Ровно n повторений.{n,}: n или более повторений.{n,m}: От n до m повторений.Регулярные выражения мощный инструмент для работы с текстом, и они могут быть полезны в самых разных задачах, от простой проверки ввода до сложного парсинга текста.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤20
Релиз Pyrefly type checker 1.0.0 уже здесь: https://pyrefly.org/blog/v1.0/
Вот основные улучшения:
🐍 Обновлённая диагностика стала в 2–125 раз быстрее
🐍 Полная проверка типов ускорена на 20–36%
🐍 Первичная индексация при первом сканировании стала в 2–3 раза быстрее
🐍 Использование памяти снижено на 40–60%
🐍 Добавлен отчёт о покрытии type checking
👉 @PythonPortal
Вот основные улучшения:
🐍 Обновлённая диагностика стала в 2–125 раз быстрее
🐍 Полная проверка типов ускорена на 20–36%
🐍 Первичная индексация при первом сканировании стала в 2–3 раза быстрее
🐍 Использование памяти снижено на 40–60%
🐍 Добавлен отчёт о покрытии type checking
Please open Telegram to view this post
VIEW IN TELEGRAM
pyrefly.org
Pyrefly v1.0 is here! | Pyrefly
Pyrefly has reached stable version 1.0 status, read about the new features and how to get started.
😁4❤1
Google выпустила свои официальные skills для AI-агентов.
Компания опубликовала 13 skills, совместимых с Claude Code, Cursor, Copilot и другими агентами.
Они позволяют агентам выполнять продвинутые задачи и автоматизировать сложные рабочие процессы.
Это бесплатно и с открытым исходным кодом : https://github.com/google/skills
👉 @PythonPortal
Компания опубликовала 13 skills, совместимых с Claude Code, Cursor, Copilot и другими агентами.
Они позволяют агентам выполнять продвинутые задачи и автоматизировать сложные рабочие процессы.
Это бесплатно и с открытым исходным кодом : https://github.com/google/skills
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👍3