ch
Feedback
Python Portal

Python Portal

前往频道在 Telegram

Всё самое интересное из мира Python Сотрудничество, реклама: @devmangx Менеджер: @Spiral_Yuri РКН: https://clck.ru/3GMMF6

显示更多

📈 Telegram 频道 Python Portal 的分析概览

频道 Python Portal (@pythonportal) 俄语 语言赛道中的 是活跃参与者。目前社区聚集了 52 460 名订阅者,在 技术与应用 类别中位列第 2 547,并在 俄罗斯 地区排名第 11 911

📊 受众指标与增长动态

невідомо 创建以来,项目保持高速增长,吸引了 52 460 名订阅者。

根据 10 六月, 2026 的最新数据,频道保持稳定运转。过去 30 天订阅人数变化为 -783,过去 24 小时变化为 -20,整体触达仍然可观。

  • 认证状态: 未认证
  • 互动率 (ER): 平均受众互动率为 9.32%。内容发布后 24 小时内通常能获得 5.78% 的反应,占订阅者总量。
  • 帖子覆盖: 每篇帖子平均可获得 4 892 次浏览,首日通常累积 3 033 次浏览。
  • 互动与反馈: 受众积极参与,单帖平均反应数为 25
  • 主题关注点: 内容集中在 строка, none, true, модуль, peter 等核心主题上。

📝 描述与内容策略

作者将该频道定位为表达主观观点的平台:
Всё самое интересное из мира Python Сотрудничество, реклама: @devmangx Менеджер: @Spiral_Yuri РКН: https://clck.ru/3GMMF6

凭借高频更新(最新数据采集于 11 六月, 2026),频道始终保持新鲜度与高覆盖。分析显示受众积极互动,使其成为 技术与应用 类别中的关键影响点。

52 460
订阅者
-2024 小时
-1877
-78330
帖子存档
Хорошо там, где нас нет 🤣🤣🤣 👉 @PythonPortal
Хорошо там, где нас нет 🤣🤣🤣 👉 @PythonPortal

Монолит VS микросервисы 👉 @PythonPortal

Оказалось, что история с покупкой доступа к якобы топовым моделям, а по факту к подменённым, наконец получила подтверждение в статье. Исследователи провели аудит 17 сторонних API для LLM-агентов и выяснили: • почти 46% endpoint'ов не проходят fingerprint-тесты • API заявляет, что это GPT-5 или Gemini-2.5, а на бэкенде тихо подставлен GLM-4 • точность на медицинском бенчмарке падает с 83% до 37% Эти фейковые API уже процитированы в 187 научных статьях, а некоторые связанные с ними проекты набрали почти 60 тысяч звёзд на GitHub. И главная проблема тут в том, что научные выводы строятся на поддельных моделях. Статья: https://arxiv.org/abs/2603.01919 👉 @PythonPortal

🤔🤔🤔 👉 @PythonPortal
🤔🤔🤔 👉 @PythonPortal

Немного базы Python. # 12 - Startswith и Endswith startswith() и endswith() это строковые методы, которые возвращают True, если строка начинается или заканчивается указанным значением. Эти методы можно использовать в разных ситуациях, когда нужно проверить префикс или суффикс у строки. Они особенно полезны для фильтрации и задач валидации. - Использование метода Startswith Допустим, ты хочешь получить все имена в списке, которые начинаются на a. Вот как можно использовать startswith() для этого:
list1 = ['lemon', 'Orange',
         'apple', 'apricot']

new_list = [fruit for fruit in list1 if fruit.startswith('a')]
print(new_list)
['apple', 'apricot']
- Использование метода Endswith Метод endswith() можно использовать для валидации ввода пользователя. Например, если нужно проверить, что пользователь ввёл корректный Gmail-адрес, можно убедиться, что ввод заканчивается на gmail.com:
user_input = input("Введите email-адрес: ")

if user_input.endswith("@gmail.com"):
    print("Валидный email-адрес.")
else:
    print("Невалидный email-адрес.")
👉 @PythonPortal #100daysofpython

Новый PEP Ограничения в софтверной инженерии созданы, чтобы их ломать. Годами меня бесил разрыв между Python и TypeScript: у
Новый PEP Ограничения в софтверной инженерии созданы, чтобы их ломать. Годами меня бесил разрыв между Python и TypeScript: у одного невероятно динамичный и мощный рантайм, у другого невероятно динамичная и мощная система типов. Так почему бы не совместить и то, и другое? 🔥 Встречайте PEP 827, результат годового ресерча о том, что нужно, чтобы прокачать type checking в Python до уровня его динамичности. Вот как можно реализовать Record, сравнив варианты бок о бок: TypeScript
type Record<K extends string, V> = {
  [P in K]: V
}

// так что...

type Fruit = Record<
  'apple' | 'banana' | 'orange',
  string
>

// развернется в
//
// {
//   apple: string;
//   banana: string;
//   orange: string;
// }
Python
type Record[K, V] = NewTypedDict[
  *[Member[k, V] for k in Iter[FromUnion[K]]]
]

# так что...

type Fruit = Record[
  Literal["apple", "banana", "orange"],
  str
]

# развернется в
#
# class <Fruit>:
#   apple: str
#   banana: str
#   orange: str
Вот пример Pick: TypeScript
type Pick<T, K extends keyof T> = {
  [P in K]: T[P]
}
Python
type Pick[T, K] = NewProtocol[*[
  p for p in Iter[Attrs[T]]
  if IsAssignable[p.name, K]
]]
А вот Omit. Обрати внимание: версия на Python по сути не изменилась по сравнению с реализацией Pick, в отличие от TS. TypeScript
ts id="5ehk8a"
type Omit<T, K extends keyof T> = {
  [P in Exclude<keyof T, K>]: T[P]
}
Python
py id="g6u8k1"
type Omit[T, K] = NewProtocol[*[
  p for p in Iter[Attrs[T]]
  if not IsAssignable[p.name, K]
]]
👉 @PythonPortal

🧠🧠🧠 👉 @PythonPortal
🧠🧠🧠 👉 @PythonPortal

Гвидо ван Россум (отец Python) выпустил новую версию typeagent, Python-библиотеки, над которой он работал с середины прошлого года, и все больше делал это вместе с Claude. Она реализует память для агентов. Установка: pip install typeagent. CHANGELOG.md 👉 @PythonPortal

Agentic RAG для чайников Модульный agentic RAG, собранный на LangGraph. Разберись с RAG-агентами за считанные минуты. Этот репозиторий показывает, как собрать agentic RAG на LangGraph с минимумом кода. Что обещают в README, если коротко: - иерархическая индексация (parent/child чанки: ищем по мелким, достаём крупные для контекста) - память диалога - уточнение запроса (вплоть до паузы и вопроса пользователю) - оркестрация пайплайна через LangGraph, плюс параллельный map-reduce для сложных запросов - автоперезапрос, если результатов мало, и компрессия контекста, чтобы не раздувать промпт https://github.com/GiovanniPasq/agentic-rag-for-dummies 👉 @PythonPortal

VPN за 60 секунд 👉 @PythonPortal

Немного базы Python. День 11 - Добавление разделителя тысяч Если вы работаете с большими числами и хотите добавить разделитель, чтобы их было проще читать, есть несколько способов это сделать. Вот некоторые из них: ▪️Использование функции format List comprehension проходит по каждому элементу (числу) в my_list. Для каждого числа он форматирует его в строку с разделителями тысяч запятыми, используя строку формата '{:,}'.format(num).
my_list = [10898767, 9876780, 9908763]

new_list = ['{:,}'.format(num) for num in my_list]
print(new_list)

# ['10,898,767', '9,876,780', '9,908,763']
Вывод печатает new_list, который содержит отформатированные строки с разделителями запятыми. ▪️Использование f-строк Также можно использовать f-строки, чтобы добавить разделители тысяч. Обратите внимание ниже: вместо запятой (,) как разделителя мы используем подчёркивание (_).
my_list = [10898767, 9876780, 9908763]

new_list = [f"{num:_}" for num in my_list]
print(new_list)

# ['10_898_767', '9_876_780', '9_908_763']
Заметили, что в обоих случаях мы используем list comprehension, чтобы добавить разделитель? Крутая штука, правда? 😉 ▪️Использование модуля locale Модуль locale даёт способ форматировать числа с разделителями тысяч в соответствии с текущими настройками локали. Вы можете выставить нужную локаль и использовать метод locale.format_string(). Вот как это выглядит на практике:
import locale

my_list = [10898767, 9876780, 9908763]
formatted_list = []

for num in my_list:
    # Set the locale
    locale.setlocale(locale.LC_ALL, 'en_US.UTF-8')
    formatted_list.append(locale.format_string("%d", num, grouping=True))

print(formatted_list)
Этот код проходит по каждому числу в my_list через цикл for. Он задаёт нужную локаль 'en_US.UTF-8' с помощью locale.setlocale(locale.LC_ALL, 'en_US.UTF-8'). Это выставляет локаль на США с кодировкой UTF-8, где для тысяч используются запятые. Дальше locale.format_string('%d', num, grouping=True) форматирует число (num) в строку с разделителями тысяч. Спецификатор формата '%d' означает, что число нужно форматировать как целое, а grouping=True указывает, что разделители тысяч должны быть включены. 👉 @PythonPortal #100daysofpython

10 библиотек Python для генеративного ИИ, которые нужно освоить в 2026 году 👉 @PythonPortal
10 библиотек Python для генеративного ИИ, которые нужно освоить в 2026 году 👉 @PythonPortal

Советы от реальных экспертов по оптимизации 👉 @PythonPortal
Советы от реальных экспертов по оптимизации 👉 @PythonPortal

Немного базы Python. День 10 - Абсолютное значение (модуль) числа Допустим, у тебя есть отрицательное число и ты хочешь получить его абсолютное значение. Для этого можно использовать функцию abs(). Функция abs() возвращает абсолютное значение любого числа (положительного, отрицательного и комплексного). Ниже показано, как получить список абсолютных значений из списка, где есть и отрицательные, и положительные числа. Используем list comprehension.
list1 = [-12, -45, -67, -89, 34, 67, -13]

print([abs(num) for num in list1])
[12, 45, 67, 89, 34, 67, 13]
Также abs() можно применять к числу с плавающей точкой, и она вернет абсолютное значение. Смотри ниже:
num = -23.12

print(abs(num))
23.12
➡️Использование модуля math Если тебе нужны более продвинутые математические функции, можно использовать fabs() из модуля math. Эта функция всегда возвращает float.
import math

num = -23.12
absolute_value = math.fabs(num)
absolute_value
23.12
➡️Использование lambda-функции Можно также использовать lambda, чтобы превратить отрицательное число в модуль. Код ниже проверяет, меньше ли x нуля (то есть отрицательное ли значение). Если да, возвращает -x, по сути убирая минус и делая число положительным. Если x не отрицательное (больше или равно 0), возвращает x как есть.
num = -23.12
absolute_value = (lambda x: -x if x < 0 else x)(num)
absolute_value
23.12
👉 @PythonPortal #100daysofpython

Этот Python-фреймворк может скрейпить ЛЮБОЙ сайт и вытаскивать структурированные данные за считанные минуты. Называется Scrap
Этот Python-фреймворк может скрейпить ЛЮБОЙ сайт и вытаскивать структурированные данные за считанные минуты. Называется Scrapy. Он краулит сайты и извлекает структурированные данные целиком с твоей машины. Никаких счетов за SaaS-скрейпинг. Никаких лимитов облачных API. Никакие данные не уходят за пределы твоей инфраструктуры. Работает на самом “боевом” краулинг-движке в Python: 59K звёзд и 15+ лет продакшен-использования. → Описал spider один раз → Получил чистые структурированные данные → Масштабируешься до миллионов страниц → Экспорт в JSON, CSV, XML в один момент Всё локально. Ноль зависимости от облака. Но это не просто скрипт для парсинга. Это полноценный фреймворк для извлечения данных: → Асинхронная архитектура для параллельного краулинга в масштабе → Встроенные middleware для прокси, ретраев и rate limiting → CSS и XPath селекторы без лишнего бойлерплейта → Подключаемые pipelines для чистки, дедупликации и сохранения → 54 800+ продакшен-проектов уже завязаны на него 100% open source. Лицензия BSD-3. Работает на macOS, Windows и Linux уже сейчас. Хочешь сделать хорошо, сделай сам, вместо облачных сервисов запускаешь всё у себя. 🪖🪖 100% опенсорс 👉 @PythonPortal

Всегда пиши код так, будто тот, кому потом его поддерживать, это буйный психопат, который знает, где ты живешь. — Аноним Знае
Всегда пиши код так, будто тот, кому потом его поддерживать, это буйный психопат, который знает, где ты живешь.
— Аноним Знаете какие-нибудь забавные имена переменных? 👉 @PythonPortal

Немного базы Python. День 9. Индекс наибольшего числа Есть несколько способов найти индекс самого большого числа в списках. ▪️Функция max() и метод index() Можно использовать метод index() вместе с функцией max(), чтобы получить индекс наибольшего числа в списке. В этом примере мы с помощью max() находим самое большое число в списке и передаем его в index() как аргумент. Метод index() вернет индекс первого вхождения наибольшего числа.
In [23]: my_list = [12, 45, 67, 89, 34, 67, 13]
         largest_number_index = my_list.index(max(my_list))
         largest_number_index

Out[23]: 3
▪️max() и enumerate() В коде ниже функция max() принимает список и lambda-функцию в качестве аргументов. Мы добавляем enumerate() к списку, чтобы она могла вернуть и число из списка, и его индекс (кортеж). Параметр start в enumerate() задаем так, чтобы нумерация начиналась с позиции 0. lambda-функция используется, чтобы найти максимальное значение по второму элементу каждого кортежа, то есть по значению из my_list.
In [24]: my_list = [12, 45, 67, 89, 34, 67, 13]

         max_num = max(enumerate(my_list, start=0),
                       key = lambda x: x[1])
         print('Индекс наибольшего числа:', 
               max_num[0])

Индекс наибольшего числа: 3
▪️Списковое включение с функцией enumerate() В коде ниже мы используем списковое включение вместе с enumerate(), чтобы найти индекс самого большого числа в списке. Создаем переменную max_value - в ней хранится максимальное значение из списка. Дальше с помощью enumerate() находим индекс(ы), где значение совпадает с этим максимумом.
In [25]: my_list = [12, 45, 67, 89, 34, 67, 13]

         max_value = max(my_list)
         max_indices = [idx for idx, val in enumerate(my_list) if val == max_value]
         max_indices

Out[25]: [3]
Вывод показывает, что самое большое число находится по индексу 3. 👉 @PythonPortal

Python-совет по дизайну: используй @property только для O(1) операций Люди обычно ожидают, что всё, что выглядит как доступ к атрибуту, работает быстро. Не хочется же жать Ctrl-C на чтении атрибута, потому что там спрятан расчёт уровня Deep Thought на 7,5 миллионов лет:
>>> life.meaning
42
👉 @PythonPortal

😆😆😆 👉 @PythonPortal
😆😆😆 👉 @PythonPortal

Немного базы Python. День 8 - Сделать вложенный список плоским Я покажу вам три (3) способа, как можно развернуть двумерный список. В первом методе используется цикл for, во втором используется модуль itertools, а в третьем используется списковое включение (list comprehension). ⚙️ С помощью цикла for: Для этого метода мы используем вложенный цикл for. Внешний цикл проходит по внутренним спискам, а внутренний цикл обращается к элементам во внутренних списках.
# In [19]:
list1 = [[1, 2, 3],[4, 5, 6]]

newlist = []
for list2 in list1:
    for j in list2:
        newlist.append(j)

print(newlist)
[1, 2, 3, 4, 5, 6]
⚙️ С помощью модуля itertools: Функцию itertools.chain.from_iterable() из модуля itertools можно использовать, чтобы развернуть вложенный список. Этот метод может не подойти для списков с глубокой вложенностью.
# In [20]:
import itertools

list1 = [[1, 2, 3],[4, 5, 6]]

flat_list = list(itertools.chain.from_iterable(list1))
print(flat_list)
[1, 2, 3, 4, 5, 6]
Вы можете увидеть, что вложенный цикл был развернут. ⚙️ С помощью list comprehension Если вы не хотите импортировать itertools или писать обычный цикл for, можно просто использовать list comprehension.
# In [21]:
list1 = [[1, 2, 3], [4, 5, 6]]

flat_list = [i for j in list1 for i in j]
print(flat_list)
[1, 2, 3, 4, 5, 6]
List comprehension хорошо подходит для умеренно вложенных списков. Для глубоко вложенных списков он не подходит, так как код становится хуже читаемым. ⚙️ С помощью генераторной функции Можно создать генераторную функцию, которая делает yield элементов из вложенного списка, а затем преобразовать генератор в список.
# In [22]:
def flatten_generator(nested_list):
    for sublist in nested_list:
        for item in sublist:
            yield item

list1 = [[1, 2, 3], [4, 5, 6]]

flat_list = list(flatten_generator(list1))
flat_list
Out[22]: [1, 2, 3, 4, 5, 6]
Метод с генератором подходит для разворачивания больших или глубоко вложенных списков. Это потому, что генераторы экономно расходуют память. 👉 @PythonPortal