This media is not supported in your browser
VIEW IN TELEGRAM
Наткнулся на библиотеку art — делает ASCII-арт из текста за секунды.
Простая установка:
Пример использования:
Идеально для приветственных страничек или добавить декоративный вывод в CLI или логах😊
👉 @PythonPortal
Простая установка:
pip install art
Пример использования:
from art import text2art
Art = text2art("art") # шрифт по умолчанию
print(Art)
# Пример вывода:
# _
# __ _ _ __ | |_
# / _` || '__|| __|
# | (_| || | | |_
# \__,_||_| \__|
Art_block = text2art("art", font='block', chr_ignore=True)
print(Art_block)
# Выведет крупный блок‑текст
Идеально для приветственных страничек или добавить декоративный вывод в CLI или логах
Please open Telegram to view this post
VIEW IN TELEGRAM
❤55👍16🔥11😁3
Аналогично Unix-пайпам, в Python можно строить цепочки функций, переопределяя метод
Это позволяет связывать операции так, что вывод одной функции становится входом для следующей → чисто, читаемо и удобно для композиции
Именно так LangChain реализует элегантные пайплайны вроде:
Пример:
🔸
🔸
🔸
Теперь можно обернуть любые функции в Pipe и комбинировать их в цепочку:
👉 @PythonPortal
__or__
Это позволяет связывать операции так, что вывод одной функции становится входом для следующей → чисто, читаемо и удобно для композиции
Именно так LangChain реализует элегантные пайплайны вроде:
chat_prompt | groq_model | output_parser
Пример:
class Pipe:
def __init__(self, func):
self.func = func
def __call__(self, x):
return self.func(x)
def __or__(self, other):
return self.__class__(lambda x: other(self(x)))
Pipe
— обёртка над функцией__or__
(|) позволяет комбинировать пайпами, как в Unix__call__
делает объект вызываемым, как обычную функциюТеперь можно обернуть любые функции в Pipe и комбинировать их в цепочку:
double = Pipe(lambda x: x * 2)
square = Pipe(lambda x: x ** 2)
pipeline = double | square
print(pipeline(3)) # (3 * 2) ** 2 = 36
Please open Telegram to view this post
VIEW IN TELEGRAM
👍30❤15🏆4🔥2
This media is not supported in your browser
VIEW IN TELEGRAM
Буквально за считанные минуты собери умного чат-бота для своего сайта
Firecrawl только что выкатили Firestarter — полноценную платформу для чат-ботов, которая:
🔸 Скрейлит твой сайт
🔸 Индексирует контент
🔸 Разворачивает чат-интерфейс с поддержкой RAG и API в стиле OpenAI
Полностью open-source - ccылка
Попробуйте: ссылка
👉 @PythonPortal
Firecrawl только что выкатили Firestarter — полноценную платформу для чат-ботов, которая:
Полностью open-source - ccылка
Попробуйте: ссылка
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21🔥4🤝3❤1💊1
Совет по Pytest:
Используйте пользовательские маркеры
Это упрощает организацию и запуск определённых групп тестов
В примере на изображении используются два пользовательских маркера:
🔹
– Применён к тесту для замера производительности
🔹
– Применён к тестам для работы с базой данных
Мы можем запускать выборочно, например тесты, помеченные маркером
👉 @PythonPortal
Используйте пользовательские маркеры
pytest
, чтобы добавлять метаданные к тестам.Это упрощает организацию и запуск определённых групп тестов
В примере на изображении используются два пользовательских маркера:
@pytest.mark.performance
– Применён к тесту для замера производительности
test_page_load_time
@pytest.mark.database
– Применён к тестам для работы с базой данных
test_database_connection
и test_data_integrity
Мы можем запускать выборочно, например тесты, помеченные маркером
@pytest.mark.database
pytest -m database
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20❤8🔥7🏆1
This media is not supported in your browser
VIEW IN TELEGRAM
Я только сегодня узнал об этом трюке с GitHub
Просто введите
Такой простой способ сэкономить время🤯
👉 @PythonPortal
Просто введите
repo.new
в адресной строке браузера — и сразу откроется страница создания нового репозитория на GitHub.Такой простой способ сэкономить время
Please open Telegram to view this post
VIEW IN TELEGRAM
👍43❤12🤔5🏆2
Совет по Python:
Знаете ли вы, что можно задать максимальную длину списка, используя deque из модуля collections?
Класс
В приведённом примере📖
👉 @PythonPortal
deque.maxlen
Знаете ли вы, что можно задать максимальную длину списка, используя deque из модуля collections?
Класс
deque
(двусторонняя очередь) из модуля collections поддерживает параметр maxlen
, который устанавливает максимальный размер очереди. Когда очередь достигает этого размера, добавление новых элементов автоматически удаляет элементы с противоположного конца, реализуя поведение "первым пришёл — первым ушёл" (FIFO) с ограничением по размеру.В приведённом примере
deque
имеет максимальную длину 3. При добавлении значения 4 удаляется 1, что делает такую структуру идеальной для реализации скользящего окна последних трёх элементов Please open Telegram to view this post
VIEW IN TELEGRAM
❤36👍22🤯8🏆1
Numpy CheatSheet.pdf
9 MB
Это шпаргалка по библиотеке NumPy
Краткое руководство по основным операциям и функциям для работы с массивами в Python.😄
👉 @PythonPortal
Краткое руководство по основным операциям и функциям для работы с массивами в Python.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍27❤11🏆3
This media is not supported in your browser
VIEW IN TELEGRAM
Это что игра What It Prints?
Да, это онлайн-игра‑головоломка для разработчиков и студентов, где нужно угадать, что выведет код. Простая и увлекательная: показывается фрагмент, а вы должны определить его вывод
Для самопроверки самое то💯
👉 @PythonPortal
Да, это онлайн-игра‑головоломка для разработчиков и студентов, где нужно угадать, что выведет код. Простая и увлекательная: показывается фрагмент, а вы должны определить его вывод
Для самопроверки самое то
Please open Telegram to view this post
VIEW IN TELEGRAM
👍43🔥7😢6❤4
This media is not supported in your browser
VIEW IN TELEGRAM
Auto PY to EXE — это open-source инструмент для упаковки Python-проектов в исполняемые файлы, который гораздо проще в использовании, чем pyfuze
Он предоставляет наглядный графический интерфейс: просто выбираешь скрипт, настраиваешь нужные параметры и нажимаешь кнопку запуска —> весь процесс упаковки проходит без необходимости возиться с командной строкой.
Дополнительно можно сохранять часто используемые настройки, отслеживать процесс в реальном времени и просматривать подробные логи.📖
Инструмент кроссплатформенный, поддерживает Windows, macOS и Linux, а установка через pip максимально простая:
👉 @PythonPortal
Он предоставляет наглядный графический интерфейс: просто выбираешь скрипт, настраиваешь нужные параметры и нажимаешь кнопку запуска —> весь процесс упаковки проходит без необходимости возиться с командной строкой.
Дополнительно можно сохранять часто используемые настройки, отслеживать процесс в реальном времени и просматривать подробные логи.
Инструмент кроссплатформенный, поддерживает Windows, macOS и Linux, а установка через pip максимально простая:
pip install auto-py-to-exe
Please open Telegram to view this post
VIEW IN TELEGRAM
👍47🔥14❤9
Использование контекстного менеджера как таймера
Большинство разработчиков ассоциируют контекстные менеджеры (with-выражение) только с работой с файлами. Но на самом деле этот паттерн решает более общую задачу.
Контекстные менеджеры идеально подходят для управления любыми ресурсами, у которых есть чёткий момент начала и завершения. Например:
• File I/O
• Сессии логирования
• Транзакции в базе данных
• Сетевые и БД-соединения
• Замер производительности
• Управление потоками и блокировками
Вместо того чтобы вручную замерять время до и после блока кода, можно использовать контекстный менеджер — это чистое и питоничное решение.
Обычно контекстный менеджер реализуется как класс с методами
Но есть более лаконичный способ — использовать декоратор
Пример как использовать контекстный менеджер как таймер прикрепил✌️
👉 @PythonPortal
Большинство разработчиков ассоциируют контекстные менеджеры (with-выражение) только с работой с файлами. Но на самом деле этот паттерн решает более общую задачу.
Контекстные менеджеры идеально подходят для управления любыми ресурсами, у которых есть чёткий момент начала и завершения. Например:
• File I/O
• Сессии логирования
• Транзакции в базе данных
• Сетевые и БД-соединения
• Замер производительности
• Управление потоками и блокировками
with
гарантирует, что инициализация и очистка ресурса будут выполнены автоматически, даже если в блоке возникнет исключение. Это делает код чище и надёжнее.Вместо того чтобы вручную замерять время до и после блока кода, можно использовать контекстный менеджер — это чистое и питоничное решение.
Обычно контекстный менеджер реализуется как класс с методами
__enter__
и __exit__
Но есть более лаконичный способ — использовать декоратор
@contextmanager
из модуля contextlib, чтобы писать генераторные менеджеры без лишнего шаблонного кода.Пример как использовать контекстный менеджер как таймер прикрепил
Please open Telegram to view this post
VIEW IN TELEGRAM
👍29❤13🔥4
Топ-10 распространённых магических методов в Python
👉 @PythonPortal
__init__(self)
– Инициализация нового объекта__str__(self
) – Строковое представление__repr__(self)
– Представление для отладки__len__(self)
– Длина объекта__getitem__(self, key)
– Доступ к элементу по индексу/ключу__setitem__(self, key, value)
– Установка значения по индексу/ключу__delitem__(self, key)
– Удаление элемента по ключу__eq__(self, other)
– Проверка на равенство__add__(self, other)
– Поведение оператора сложения +
__call__(self, ...)
– Делает экземпляр вызываемым как функцияPlease open Telegram to view this post
VIEW IN TELEGRAM
🤝30❤25👍15🤣5🔥2
Совет по Python:
Функция
Встроенная функция locals() возвращает словарь, представляющий текущую локальную таблицу символов.
Таблица символов — это структура, в которой Python хранит все имена (переменные, функции, классы и т.д.), доступные в определённой области видимости.
Когда
В примере переменные
👉 @PythonPortal
Функция
locals()
Встроенная функция locals() возвращает словарь, представляющий текущую локальную таблицу символов.
Таблица символов — это структура, в которой Python хранит все имена (переменные, функции, классы и т.д.), доступные в определённой области видимости.
Когда
locals()
вызывается внутри функции, она возвращает словарь со всеми локальными переменными, определёнными в рамках этой функции.В примере переменные
z
и x
определены локально внутри функции. Переменная y = 20
является глобальной и не относится к области видимости my_func(). Поэтому locals() внутри my_func
не включает y
Please open Telegram to view this post
VIEW IN TELEGRAM
👍52❤17🔥3🤔3
This media is not supported in your browser
VIEW IN TELEGRAM
Наткнулся на прикольный ресурс для изучения SQL
Это интерактивный тренажёр, который позволяет практиковаться в написании SQL-запросов прямо в браузере.
Подойдёт и новичкам, и тем, кто хочет освежить SELECT, JOIN и другие команды на практике📝
👉 @PythonPortal
Это интерактивный тренажёр, который позволяет практиковаться в написании SQL-запросов прямо в браузере.
Подойдёт и новичкам, и тем, кто хочет освежить SELECT, JOIN и другие команды на практике
Please open Telegram to view this post
VIEW IN TELEGRAM
👍48❤11
Совет по Python:
При объединении итерируемых объектов разной длины используй
Используй🤵
👉 @PythonPortal
При объединении итерируемых объектов разной длины используй
itertools.zip_longest()
вместо zip()
, чтобы все элементы были объединены в пары.zip()
объединяет элементы, пока один из итерируемых не закончится:>>> list(zip(letters, numbers))
[('a', 1), ('b', 2)]
zip_longest()
продолжает объединение до конца самого длинного итерируемого объекта:>>> list(zip_longest(letters, numbers))
[('a', 1), ('b', 2), ('c', None)]
fillvalue
позволяет указать значение-заполнитель для отсутствующих элементов:>>> list(zip_longest(letters, numbers, fillvalue='N/A'))
[('a', 1), ('b', 2), ('c', 'N/A')]
Используй
zip_longest
, когда важно сохранить все данные, даже при разной длине итерируемых объектов Please open Telegram to view this post
VIEW IN TELEGRAM
🔥40❤17👍9🏆5
This media is not supported in your browser
VIEW IN TELEGRAM
Хочешь понять, как работает Git — напиши свой.
Линус Торвальдс прославился тем, что написал Git за один день на C, уложившись в 1000 строк — и закоммитил его через Git. Сейчас проект насчитывает >500k строк, но его ядро можно реализовать за одни выходные.
Write Yourself a Git – пошаговое руководство, помогающее создать упрощённую версию Git на Python. Автор показывает, как за ~978 строк кода реализовать ключевые команды Git:
Git кажется сложным, но его ядро на удивление простое. Проект wyag позволяет «разобрать его на атомы» и понять фундаментальные концепции через код😡
👉 @PythonPortal
Линус Торвальдс прославился тем, что написал Git за один день на C, уложившись в 1000 строк — и закоммитил его через Git. Сейчас проект насчитывает >500k строк, но его ядро можно реализовать за одни выходные.
Write Yourself a Git – пошаговое руководство, помогающее создать упрощённую версию Git на Python. Автор показывает, как за ~978 строк кода реализовать ключевые команды Git:
init, add, commit, log, checkout, status
и другие — при этом всё остаётся совместимым с настоящим GitGit кажется сложным, но его ядро на удивление простое. Проект wyag позволяет «разобрать его на атомы» и понять фундаментальные концепции через код
Please open Telegram to view this post
VIEW IN TELEGRAM
❤53👍18🔥10
Многие разработчики на Python считают метод
Настоящий конструктор в Python — это метод
Сначала добавим несколько print-вызовов в метод
Теперь добавим метод
Если запустить этот код, станет видно, что первым вызывается именно метод
Хочу отметить, что в большинстве случаев вам не придётся использовать метод
Так что продолжайте спокойно использовать проверенный метод😄
👉 @PythonPortal
__init__()
конструктором, но на самом деле это не так.Настоящий конструктор в Python — это метод
__new__()
. Давайте разберёмся, как это доказать, на небольшом примере.Сначала добавим несколько print-вызовов в метод
__init__()
, чтобы понять, что происходит при создании экземпляра класса: (2 фото)Теперь добавим метод
__new__()
и посмотрим, вызывается ли __init__()
до или после __new__()
. (3 фото)Если запустить этот код, станет видно, что первым вызывается именно метод
__new__()
Хочу отметить, что в большинстве случаев вам не придётся использовать метод
__new__()
в своём коде. На практике он применяется почти исключительно в метапрограммировании, фабричных функциях и при работе с API — по крайней мере, из того, что мне доводилось видеть.Так что продолжайте спокойно использовать проверенный метод
__init__()
— он по-прежнему отлично справляется со своей задачей Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍35❤16💊8🔥5🤔2👀1
This media is not supported in your browser
VIEW IN TELEGRAM
Google представила мощного AI-ассистента для работы в терминале — Gemini CLI
На текущем этапе инструмент фактически доступен бесплатно, работает на базе модели Gemini 2.5 Pro, с такими лимитами:
- До 60 запросов в минуту
- До 1000 запросов в день
Для личного использования этих ограничений более чем достаточно. На фоне подписок по $10–20 в месяц на другие AI-инструменты для разработки — Google действительно щедр.😮
• Контекст до 1 млн токенов
• Мультимодальность: UI-скетчи, PDF → код
• Автопоиск PR и merge-автоматизация
• Поддержка MCP-протокола
• Встроенный Google Search
👉 @PythonPortal
На текущем этапе инструмент фактически доступен бесплатно, работает на базе модели Gemini 2.5 Pro, с такими лимитами:
- До 60 запросов в минуту
- До 1000 запросов в день
Для личного использования этих ограничений более чем достаточно. На фоне подписок по $10–20 в месяц на другие AI-инструменты для разработки — Google действительно щедр.
• Контекст до 1 млн токенов
• Мультимодальность: UI-скетчи, PDF → код
• Автопоиск PR и merge-автоматизация
• Поддержка MCP-протокола
• Встроенный Google Search
Please open Telegram to view this post
VIEW IN TELEGRAM
❤22👍10🔥6🤔1
Преобразование систем счисления в Python с использованием встроенных функций
🔹 Из десятичной в двоичную
🔹 Из двоичной в десятичную
🔹 Из десятичной в восьмеричную
🔹 Из восьмеричной в десятичную
🔹 Из десятичной в шестнадцатеричную
🔹 Из шестнадцатеричной в десятичную
👉 @PythonPortal
decimal_number = 10
binary_number = bin(decimal_number)
print(binary_number)
# Вывод: '0b1010'
binary_number = '1010'
decimal_number = int(binary_number, 2)
print(decimal_number)
# Вывод: 10
decimal_number = 10
octal_number = oct(decimal_number)
print(octal_number)
# Вывод: '0o12'
octal_number = '12'
decimal_number = int(octal_number, 8)
print(decimal_number)
# Вывод: 10
decimal_number = 10
hex_number = hex(decimal_number)
print(hex_number)
# Вывод: '0xa'
hex_number = 'a'
decimal_number = int(hex_number, 16)
print(decimal_number)
# Вывод: 10
Please open Telegram to view this post
VIEW IN TELEGRAM
❤35👍16🔥8🏆2