🎭 Pykka — акторная модель для Python без лишних сложности. Этот проект позволяет организовывать конкурентные вычисления без традиционных проблем с состоянием и блокировками.
Вдохновлённый знаменитым Akka для JVM, Pykka предлагает минималистичный подход — никаких супервизоров или распределённых акторов, только чистые принципы обмена сообщениями между изолированными процессами.
Инструмент имеет продуманную архитектуру: разработчику достаточно определить поведение акторов, а Pykka возьмет на себя всю работу с очередями и потоками.
🤖 GitHub (https://github.com/jodal/pykka?tab=readme-ov-file)
@python_be1
Вдохновлённый знаменитым Akka для JVM, Pykka предлагает минималистичный подход — никаких супервизоров или распределённых акторов, только чистые принципы обмена сообщениями между изолированными процессами.
Инструмент имеет продуманную архитектуру: разработчику достаточно определить поведение акторов, а Pykka возьмет на себя всю работу с очередями и потоками.
🤖 GitHub (https://github.com/jodal/pykka?tab=readme-ov-file)
@python_be1
🐍 Задача уровня Pro: декоратор с внутренним состоянием
📌 Задача:
Напиши декоратор `call_limiter`, который:
- ограничивает функцию `f` максимум до `n` вызовов
- после `n` вызова функция больше не вызывается, а возвращает строку `"LIMIT REACHED"`
Пример использования:
```
(3)
def greet(name):
return f"Hello, {name}!"
print(greet("Alice")) # Hello, Alice!
print(greet("Bob")) # Hello, Bob!
print(greet("Charlie"))# Hello, Charlie!
print(greet("Dave")) # LIMIT REACHED
```
🎯 Подвохи:
- Нужно создать декоратор-фабрику с аргументом `n`
- Внутри должна быть функция с `nonlocal`, чтобы отслеживать число вызовов
- Часто путаются и используют `mutable default`, что ломает независимость между декорируемыми функциями
✅ Решение:
[спойлер: ```python
def call_limiter(n):
def decorator(func):
count = 0
def wrapper(*args, **kwargs):
nonlocal count
if count >= n:
return "LIMIT REACHED"
count += 1
return func(*args, **kwargs)
return wrapper
return decorator
```
🧪 **Проверка:**
```python][спойлер: ][спойлер: (2)
def ping():
return "pong"
print(ping()) # pong
print(ping()) # pong
print(ping()) # LIMIT REACHED][спойлер: ][спойлер: (1)
def echo(msg):
return msg
print(echo("hi")) # hi
print(echo("bye")) # LIMIT REACHED
```
🧠 **Что проверяет задача:**
• Понимание функций высшего порядка
• Работа с `nonlocal` и областью видимости
• Контроль состояния внутри декоратора
• Умение не "засорить" глобальные или общие области]
@python_be1
📌 Задача:
Напиши декоратор `call_limiter`, который:
- ограничивает функцию `f` максимум до `n` вызовов
- после `n` вызова функция больше не вызывается, а возвращает строку `"LIMIT REACHED"`
Пример использования:
```
(3)
def greet(name):
return f"Hello, {name}!"
print(greet("Alice")) # Hello, Alice!
print(greet("Bob")) # Hello, Bob!
print(greet("Charlie"))# Hello, Charlie!
print(greet("Dave")) # LIMIT REACHED
```
🎯 Подвохи:
- Нужно создать декоратор-фабрику с аргументом `n`
- Внутри должна быть функция с `nonlocal`, чтобы отслеживать число вызовов
- Часто путаются и используют `mutable default`, что ломает независимость между декорируемыми функциями
✅ Решение:
[спойлер: ```python
def call_limiter(n):
def decorator(func):
count = 0
def wrapper(*args, **kwargs):
nonlocal count
if count >= n:
return "LIMIT REACHED"
count += 1
return func(*args, **kwargs)
return wrapper
return decorator
```
🧪 **Проверка:**
```python][спойлер: ][спойлер: (2)
def ping():
return "pong"
print(ping()) # pong
print(ping()) # pong
print(ping()) # LIMIT REACHED][спойлер: ][спойлер: (1)
def echo(msg):
return msg
print(echo("hi")) # hi
print(echo("bye")) # LIMIT REACHED
```
🧠 **Что проверяет задача:**
• Понимание функций высшего порядка
• Работа с `nonlocal` и областью видимости
• Контроль состояния внутри декоратора
• Умение не "засорить" глобальные или общие области]
@python_be1
Всем привет) Помогите решить задачку, плиз. Я только недавно учиться начала (очные годовые курсы, два раза в неделю занятия), ООП прошли, но обучение, скажу так: "так себе...". Только начинаю что-то понимать, как тут же другая тема, а ещё прошлую тему не закрепили. Причем, все обучение построено на довольно-таки простых примерах, а в реальной работе, по-любому, все гораздо сложнее.
А тут друг-программист мне задачку задал (чисто чтоб проверить мои знания), а я и растерялась совсем. Не знаю как решить. И спрашивать у него не буду: прикалываться начнет. У меня от его приколов аж все желание учиться пропадает.
Так что, буду очень рада, если кто-нибудь из подписчиков группы мне поможет и объяснит эту задачку, а то я уже отчаялась совсем((
Задачку скину в личку тем, кто отзовётся. Надеюсь, что мир не без добрых людей😊
@python_be1
А тут друг-программист мне задачку задал (чисто чтоб проверить мои знания), а я и растерялась совсем. Не знаю как решить. И спрашивать у него не буду: прикалываться начнет. У меня от его приколов аж все желание учиться пропадает.
Так что, буду очень рада, если кто-нибудь из подписчиков группы мне поможет и объяснит эту задачку, а то я уже отчаялась совсем((
Задачку скину в личку тем, кто отзовётся. Надеюсь, что мир не без добрых людей😊
@python_be1
🧠 8 полезных советов по Oracle SQL
Если ты уже «умеешь в SELECT», пора прокачать SQL в Oracle до следующего уровня. Эти советы не для новичков — они для тех, кто работает с продом, сложными запросами и оптимизацией.
⚡ 1. Используй `PIVOT`/`UNPIVOT` вместо `CASE`
Поворот таблиц через PIVOT делает код чище и легче масштабируется.
SELECT * FROM (
SELECT department_id, gender, salary FROM employees
)
PIVOT (
SUM(salary) FOR gender IN ('M' AS male_salary, 'F' AS female_salary)
);
🧱 2. Вызывай функции как таблицы (`TABLE()` + PL/SQL)
Если функция возвращает коллекцию, её можно SELECT’ить напрямую:
SELECT * FROM TABLE(my_package.get_active_users(SYSDATE));
🚀 3. Генерация чисел без тормозов
CONNECT BY LEVEL — это медленно. Лучше так:
SELECT rownum FROM dual CONNECT BY rownum <= 10000;
🔍 4. Помогай оптимизатору через `CARDINALITY` hint
Oracle может ошибаться в оценке количества строк. Подскажи ему:
SELECT /*+ cardinality(e 100000) */ * FROM employees e ...
🧠 5. Используй `RESULT_CACHE` для повторяемых данных
Снизь нагрузку:
SELECT /*+ RESULT_CACHE */ * FROM country_codes;
📉 6. Никогда не делай `ORDER BY` без `FETCH FIRST` или `ROWNUM`
Не сортируй всё зря:
SELECT * FROM employees ORDER BY salary DESC FETCH FIRST 10 ROWS ONLY;
📦 7. Управляй CTE через `MATERIALIZE` и `INLINE`
Это может влиять на производительность:
WITH /*+ MATERIALIZE */ heavy_part AS (...)
SELECT * FROM heavy_part WHERE rownum = 1;
📊 8. Освой `MODEL` для расчётов как в Excel
Рядовые и прогнозные расчёты в SQL без курсоров:
SELECT * FROM sales
MODEL
PARTITION BY (region)
DIMENSION BY (month)
MEASURES (sales)
RULES (
sales[13] = sales[12] * 1.1
);
💡 Не ограничивайся SELECT — используй весь потенциал Oracle SQL.
👍 Лайк и сохраняй себе, чтобы не потерять
@python_be1
Если ты уже «умеешь в SELECT», пора прокачать SQL в Oracle до следующего уровня. Эти советы не для новичков — они для тех, кто работает с продом, сложными запросами и оптимизацией.
⚡ 1. Используй `PIVOT`/`UNPIVOT` вместо `CASE`
Поворот таблиц через PIVOT делает код чище и легче масштабируется.
SELECT * FROM (
SELECT department_id, gender, salary FROM employees
)
PIVOT (
SUM(salary) FOR gender IN ('M' AS male_salary, 'F' AS female_salary)
);
🧱 2. Вызывай функции как таблицы (`TABLE()` + PL/SQL)
Если функция возвращает коллекцию, её можно SELECT’ить напрямую:
SELECT * FROM TABLE(my_package.get_active_users(SYSDATE));
🚀 3. Генерация чисел без тормозов
CONNECT BY LEVEL — это медленно. Лучше так:
SELECT rownum FROM dual CONNECT BY rownum <= 10000;
🔍 4. Помогай оптимизатору через `CARDINALITY` hint
Oracle может ошибаться в оценке количества строк. Подскажи ему:
SELECT /*+ cardinality(e 100000) */ * FROM employees e ...
🧠 5. Используй `RESULT_CACHE` для повторяемых данных
Снизь нагрузку:
SELECT /*+ RESULT_CACHE */ * FROM country_codes;
📉 6. Никогда не делай `ORDER BY` без `FETCH FIRST` или `ROWNUM`
Не сортируй всё зря:
SELECT * FROM employees ORDER BY salary DESC FETCH FIRST 10 ROWS ONLY;
📦 7. Управляй CTE через `MATERIALIZE` и `INLINE`
Это может влиять на производительность:
WITH /*+ MATERIALIZE */ heavy_part AS (...)
SELECT * FROM heavy_part WHERE rownum = 1;
📊 8. Освой `MODEL` для расчётов как в Excel
Рядовые и прогнозные расчёты в SQL без курсоров:
SELECT * FROM sales
MODEL
PARTITION BY (region)
DIMENSION BY (month)
MEASURES (sales)
RULES (
sales[13] = sales[12] * 1.1
);
💡 Не ограничивайся SELECT — используй весь потенциал Oracle SQL.
👍 Лайк и сохраняй себе, чтобы не потерять
@python_be1
This media is not supported in your browser
VIEW IN TELEGRAM
Ночное-полезное: Oh My <s>God</s> Git — прикольная игра с открытым исходным кодом, которая с помощью карточек поможет понять логику работы GIT и научит с ним работать.
Можно залипнуть на сайте (https://ohmygit.org/) или поставить себе локально с GitHub (https://github.com/git-learning-game/oh-my-git/).
@python_be1
Можно залипнуть на сайте (https://ohmygit.org/) или поставить себе локально с GitHub (https://github.com/git-learning-game/oh-my-git/).
@python_be1
https://uproger.com/besplatnaya-podpiska-chatgpt-kak-polzovatsya-bez-oplaty-v-2025-godu/
@python_be1
https://uproger.com/besplatnaya-podpiska-chatgpt-kak-polzovatsya-bez-oplaty-v-2025-godu/
@python_be1
https://uproger.com/besplatnaya-podpiska-chatgpt-kak-polzovatsya-bez-oplaty-v-2025-godu/
UPROGER | Программирование
Бесплатная подписка ChatGPT — как пользоваться без оплаты в 2025 году
Всё больше людей интересуется тем, как получить бесплатную подписку ChatGPT. Сервис от OpenAI стал невероятно популярным благодаря своим возможностям: написание текстов, помощь в программировании, переводах, генерации идей и даже написании кода. Но нужна…
🪬 Boto3 — мост между Python и AWS. Эта официальная Python-библиотека предоставляет удобный интерфейс для взаимодействия с сервисами AWS — от простых операций с S3 до управления кластерами EC2.
После недавнего прекращения поддержки Python 3.8 проект сосредоточился на современных версиях языка. Особенность Boto3 в двухуровневой архитектуре: низкоуровневые клиенты для точного контроля и ресурсные объекты для упрощённого синтаксиса. Документация от AWS включает примеры для всех основных сервисов, что делает интеграцию почти безболезненной.
🤖 GitHub (https://github.com/boto/boto3)
@python_be1
После недавнего прекращения поддержки Python 3.8 проект сосредоточился на современных версиях языка. Особенность Boto3 в двухуровневой архитектуре: низкоуровневые клиенты для точного контроля и ресурсные объекты для упрощённого синтаксиса. Документация от AWS включает примеры для всех основных сервисов, что делает интеграцию почти безболезненной.
🤖 GitHub (https://github.com/boto/boto3)
@python_be1
ReadWriteMemory — это полезная библиотека, позволяющая легко читать/записывать в память любого процесса.
https://pypi.org/project/ReadWriteMemory/
@python_be1
https://pypi.org/project/ReadWriteMemory/
@python_be1
🖥 Как масштабировать Python Task Queue — подробный гайд
Когда ваше Python-приложение начинает активно использовать фоновые задачи (email-уведомления, видеообработка, интеграции и т.д.), быстро возникает проблема: очередь задач растёт, задержка увеличивается, пользователи начинают ощущать тормоза.
В статье разбирается, как это решать грамотно, автоматически и эффективно.
🎯 Основные проблемы:
• Даже при низком CPU задачи могут выполняться с задержкой
• Очередь может казаться «тихой», но задачи копятся
• Масштабирование вручную по метрикам CPU/памяти — неэффективно
• Часто “один жирный воркер” не решает проблему — надо менять подход
⚙ Как масштабировать: пошагово
1) 🔌 Выбор брокера сообщений
• Redis — прост в настройке, отлично работает с Celery и RQ
• RabbitMQ — надёжнее (повторы, подтверждения), подходит для критичных задач
2) ⚙ Настройка воркеров
• *Вертикальное масштабирование*
— больше процессов внутри одного воркера (в Celery можно concurrency)
• *Горизонтальное масштабирование*
— запуск множества воркеров на разных инстансах, читающих из одной очереди
— универсальное и гибкое решение
3) 📈 Авто-скейлинг по latency, а не CPU
• Частая ошибка: масштабировать по CPU
• Правильный подход: масштабировать по времени ожидания задач в очереди
• Judoscale позволяет автоматизировать масштабирование именно по queue latency
• При росте задержки запускаются новые воркеры, при снижении — отключаются
4) 🧠 Fan-Out: разбивай большие задачи
Вместо:
Одна задача: обработать 10 000 пользователей
Правильно:
10 000 задач: по одной на каждого пользователя
Преимущества:
• Параллельность
• Надёжность (ошибки локализуются)
• Легче масштабировать обработку
📊 Результаты после внедрения:
• Время ожидания задач сократилось с 25 минут до 30 секунд
• Масштабирование стало динамичным
• Инфраструктура стала дешевле — меньше простаивающих воркеров
✅ Рекомендации:
• Используй Redis или RabbitMQ в зависимости от требований
• Отдавай предпочтение горизонтальному масштабированию
• Следи за latency, а не за CPU
• Используй Judoscale для авто-масштабирования
• Применяй fan-out для повышения надёжности и скорости
Ссылка на статью: https://judoscale.com/blog/scaling-python-task-queues
@python_be1
Когда ваше Python-приложение начинает активно использовать фоновые задачи (email-уведомления, видеообработка, интеграции и т.д.), быстро возникает проблема: очередь задач растёт, задержка увеличивается, пользователи начинают ощущать тормоза.
В статье разбирается, как это решать грамотно, автоматически и эффективно.
🎯 Основные проблемы:
• Даже при низком CPU задачи могут выполняться с задержкой
• Очередь может казаться «тихой», но задачи копятся
• Масштабирование вручную по метрикам CPU/памяти — неэффективно
• Часто “один жирный воркер” не решает проблему — надо менять подход
⚙ Как масштабировать: пошагово
1) 🔌 Выбор брокера сообщений
• Redis — прост в настройке, отлично работает с Celery и RQ
• RabbitMQ — надёжнее (повторы, подтверждения), подходит для критичных задач
2) ⚙ Настройка воркеров
• *Вертикальное масштабирование*
— больше процессов внутри одного воркера (в Celery можно concurrency)
• *Горизонтальное масштабирование*
— запуск множества воркеров на разных инстансах, читающих из одной очереди
— универсальное и гибкое решение
3) 📈 Авто-скейлинг по latency, а не CPU
• Частая ошибка: масштабировать по CPU
• Правильный подход: масштабировать по времени ожидания задач в очереди
• Judoscale позволяет автоматизировать масштабирование именно по queue latency
• При росте задержки запускаются новые воркеры, при снижении — отключаются
4) 🧠 Fan-Out: разбивай большие задачи
Вместо:
Одна задача: обработать 10 000 пользователей
Правильно:
10 000 задач: по одной на каждого пользователя
Преимущества:
• Параллельность
• Надёжность (ошибки локализуются)
• Легче масштабировать обработку
📊 Результаты после внедрения:
• Время ожидания задач сократилось с 25 минут до 30 секунд
• Масштабирование стало динамичным
• Инфраструктура стала дешевле — меньше простаивающих воркеров
✅ Рекомендации:
• Используй Redis или RabbitMQ в зависимости от требований
• Отдавай предпочтение горизонтальному масштабированию
• Следи за latency, а не за CPU
• Используй Judoscale для авто-масштабирования
• Применяй fan-out для повышения надёжности и скорости
Ссылка на статью: https://judoscale.com/blog/scaling-python-task-queues
@python_be1
Руководство по пентесту и защите от киберугроз на Linux и Kali Linux https://uproger.com/rukovodstvo-po-pentestu-i-zashhite-ot-kiberugroz-na-linux-i-kali-linux
@python_be1
@python_be1
WeasyPrint — библиотека, которая превращать HTML в красивые PDF-документы.
Идеален для генерации:
* 📊 Отчетов и статистики
* 🧾 Счетов и инвойсов
* 🎟 Билетов и любых документов прямо из кода
Особенности:
🟢Полная поддержка CSS для печати (включая flex, цвета, стили)
🟢Экспорт документов в PNG
🟢Работает на Python 3.9+ (CPython и PyPy)
🟢Написан с нуля — не использует тяжёлые WebKit или Gecko
🟢Легко кастомизируется — весь layout движок на Python
https://github.com/Kozea/WeasyPrint
@python_be1
https://github.com/Kozea/WeasyPrint
Идеален для генерации:
* 📊 Отчетов и статистики
* 🧾 Счетов и инвойсов
* 🎟 Билетов и любых документов прямо из кода
Особенности:
🟢Полная поддержка CSS для печати (включая flex, цвета, стили)
🟢Экспорт документов в PNG
🟢Работает на Python 3.9+ (CPython и PyPy)
🟢Написан с нуля — не использует тяжёлые WebKit или Gecko
🟢Легко кастомизируется — весь layout движок на Python
https://github.com/Kozea/WeasyPrint
@python_be1
https://github.com/Kozea/WeasyPrint
GitHub
GitHub - Kozea/WeasyPrint: The awesome document factory
The awesome document factory. Contribute to Kozea/WeasyPrint development by creating an account on GitHub.
🔥 Polars: шпаргалка
Polars ≠ Pandas. Это колоночный движок, вдохновлённый Rust и SQL. Никаких SettingWithCopyWarning — всё иммутабельно и параллелится.
🚀 Быстрый старт
import polars as pl
df = pl.DataFrame({
"id": [1, 2, 3],
"name": ["Alice", "Bob", "Charlie"],
"score": [95, 85, 100]
})
📊 Выборка и фильтрация
df.filter(pl.col("score") > 90)
df.select(pl.col("name").str.lengths())
df[df["id"] == 2]
• Комбинированные условия:
df.filter((pl.col("score") > 80) & (pl.col("name").str.contains("A")))
---
## ⚙ Трансформации
• Вычисление новых колонок:
df.with_columns([
(pl.col("score") / 100).alias("percent"),
pl.col("name").str.to_uppercase().alias("name_upper")
])
• Удаление/переименование:
df.drop("id").rename({"name": "username"})
• apply() — только если нельзя обойтись иначе:
df.with_columns(
pl.col("score").map_elements(lambda x: x * 2).alias("doubled")
)
🧠 Группировка и агрегаты
df.groupby("name").agg([
pl.col("score").mean().alias("avg_score"),
pl.count()
])
• Агрегация с кастомной функцией:
df.groupby("name").agg(
(pl.col("score") ** 2).mean().sqrt().alias("rms")
)
---
## 🪄 Ленивая обработка (LazyFrame)
lf = df.lazy()
result = (
lf
.filter(pl.col("score") > 90)
.with_columns(pl.col("score").log().alias("log_score"))
.sort("log_score", descending=True)
.collect()
)
✅ Всё оптимизируется *до выполнения* — pushdown, predicate folding, projection pruning.
🔥 Joins
df1.join(df2, on="id", how="inner")
Варианты: "inner", "left", "outer", "cross", "semi", "anti"
📂 Работа с файлами
pl.read_csv("data.csv")
df.write_parquet("out.parquet")
pl.read_json("file.json", json_lines=True)
Ленивая загрузка:
pl.read_parquet("big.parquet", use_pyarrow=True).lazy()
---
## 🧮 Аналитика и окна
df.with_columns([
pl.col("score").rank("dense").over("group").alias("rank"),
pl.col("score").mean().over("group").alias("group_avg")
])
🧱 Структуры, списки, explode
df = pl.DataFrame({
"id": [1, 2],
"tags": [["a", "b"], ["c"]]
})
df.explode("tags")
• Работа с вложенными списками:
df.select(pl.col("tags").list.lengths())
🧪 Полезные фичи
• Проверка типов:
df.schema
df.dtypes
• Проверка на null:
df.filter(pl.col("score").is_null())
• Заполнение:
df.fill_null("forward")
• Выбор n лучших:
df.sort("score", descending=True).head(5)
📦 Советы и best practices
• Используй lazy() для производительности.
• Избегай .apply() — если можешь, используй pl.col().map_elements() или векторные выражения.
• Сохраняй schema — удобно при пайплайнах данных.
• @pl.api.register_expr_namespace("yourns") — добавляй кастомные методы как namespace.
✅ Polars: минимализм, скорость, безопасность.
@python_be1
Polars ≠ Pandas. Это колоночный движок, вдохновлённый Rust и SQL. Никаких SettingWithCopyWarning — всё иммутабельно и параллелится.
🚀 Быстрый старт
import polars as pl
df = pl.DataFrame({
"id": [1, 2, 3],
"name": ["Alice", "Bob", "Charlie"],
"score": [95, 85, 100]
})
📊 Выборка и фильтрация
df.filter(pl.col("score") > 90)
df.select(pl.col("name").str.lengths())
df[df["id"] == 2]
• Комбинированные условия:
df.filter((pl.col("score") > 80) & (pl.col("name").str.contains("A")))
---
## ⚙ Трансформации
• Вычисление новых колонок:
df.with_columns([
(pl.col("score") / 100).alias("percent"),
pl.col("name").str.to_uppercase().alias("name_upper")
])
• Удаление/переименование:
df.drop("id").rename({"name": "username"})
• apply() — только если нельзя обойтись иначе:
df.with_columns(
pl.col("score").map_elements(lambda x: x * 2).alias("doubled")
)
🧠 Группировка и агрегаты
df.groupby("name").agg([
pl.col("score").mean().alias("avg_score"),
pl.count()
])
• Агрегация с кастомной функцией:
df.groupby("name").agg(
(pl.col("score") ** 2).mean().sqrt().alias("rms")
)
---
## 🪄 Ленивая обработка (LazyFrame)
lf = df.lazy()
result = (
lf
.filter(pl.col("score") > 90)
.with_columns(pl.col("score").log().alias("log_score"))
.sort("log_score", descending=True)
.collect()
)
✅ Всё оптимизируется *до выполнения* — pushdown, predicate folding, projection pruning.
🔥 Joins
df1.join(df2, on="id", how="inner")
Варианты: "inner", "left", "outer", "cross", "semi", "anti"
📂 Работа с файлами
pl.read_csv("data.csv")
df.write_parquet("out.parquet")
pl.read_json("file.json", json_lines=True)
Ленивая загрузка:
pl.read_parquet("big.parquet", use_pyarrow=True).lazy()
---
## 🧮 Аналитика и окна
df.with_columns([
pl.col("score").rank("dense").over("group").alias("rank"),
pl.col("score").mean().over("group").alias("group_avg")
])
🧱 Структуры, списки, explode
df = pl.DataFrame({
"id": [1, 2],
"tags": [["a", "b"], ["c"]]
})
df.explode("tags")
• Работа с вложенными списками:
df.select(pl.col("tags").list.lengths())
🧪 Полезные фичи
• Проверка типов:
df.schema
df.dtypes
• Проверка на null:
df.filter(pl.col("score").is_null())
• Заполнение:
df.fill_null("forward")
• Выбор n лучших:
df.sort("score", descending=True).head(5)
📦 Советы и best practices
• Используй lazy() для производительности.
• Избегай .apply() — если можешь, используй pl.col().map_elements() или векторные выражения.
• Сохраняй schema — удобно при пайплайнах данных.
• @pl.api.register_expr_namespace("yourns") — добавляй кастомные методы как namespace.
✅ Polars: минимализм, скорость, безопасность.
@python_be1
Как оперативно заменить подстроку в строке с помощью сторонней библиотеки?
Библиотека flashtext предоставляет простой способ замены подстрок в строках. Вам нужно всего лишь указать, какие подстроки заменять, с помощью функции add_keyword(), а затем вызвать метод replace_keywords() у объекта-процессора.
@python_be1
Библиотека flashtext предоставляет простой способ замены подстрок в строках. Вам нужно всего лишь указать, какие подстроки заменять, с помощью функции add_keyword(), а затем вызвать метод replace_keywords() у объекта-процессора.
@python_be1