Python Portal
55.4K subscribers
2.47K photos
401 videos
51 files
1.01K links
Всё самое интересное из мира Python

Связь: @devmangx

РКН: https://clck.ru/3GMMF6
Download Telegram
Please open Telegram to view this post
VIEW IN TELEGRAM
😁38🔥7
This media is not supported in your browser
VIEW IN TELEGRAM
Делюсь этим Python-скриптом под OSINT: это простая, но полезная штука для расследований по возможным группам киберпреступности, потому что она позволяет в реальном времени логировать статусы присутствия в Telegram. Мониторинг определяет такие состояния:

- В СЕТИ
- БЫЛ(А)
- БЫЛ(А) НЕДАВНО
- БЫЛ(А) НА ЭТОЙ НЕДЕЛЕ
- БЫЛ(А) В ЭТОМ МЕСЯЦЕ
- БЫЛ(А) ОЧЕНЬ ДАВНО
- СТАТУС НЕИЗВЕСТЕН

Хотя это только видимые метаданные, анализ временных паттернов может помочь заметить синхронные всплески активности, возможные смены между аккаунтами, повторное использование профилей или профили, которые выглядят разными, но ведут себя синхронно.

Бот может работать по запросу (через кнопку проверки), но его также можно доработать под мониторинг изменений в реальном времени, логирование переходов статусов и авто-алерты, когда аккаунт становится В СЕТИ или меняет паттерн активности. Это позволяет заранее видеть операционные пики, выявлять неактивные или приманочные аккаунты и усиливать стратегический анализ, строго в рамках закона и для легитимных целей исследования.

👉 @PythonPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍158🔥5
Некоторые SQL-грабли, на которые до сих пор наступают даже сеньоры (мне тоже иногда приходится лезть в доки и перепроверять):

1. = NULL никогда не бывает true. Используй IS NULL / IS NOT NULL (трехзначная логика: true, false, unknown).

2. NOT IN (...) + один NULL в списке может вернуть ноль строк. Чаще безопаснее NOT EXISTS.

3. LEFT JOIN + фильтр в WHERE превращается в INNER JOIN. Фильтры по джойну клади в ON.

4. COUNT(col) пропускает NULL, а COUNT(*) нет. Из-за этого метрики потом “магически” не сходятся.

5. NULL ломает конкатенацию и сравнения. Используй COALESCE осознанно.

👉 @PythonPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3513
Согласны?

👉 @PythonPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
2😁8621👍10🔥5🌚1
Немного базы Python: print по горизонтали

Когда вы проходите циклом по итерируемому объекту, функция print печатает каждый элемент с новой строки. Это потому, что у print есть параметр end. По умолчанию значение этого параметра содержит символ перевода строки (end="\n"). Чтобы печатать в одну строку, нужно убрать перевод строки и заменить его на пустую строку (end="").

В примере ниже обратите внимание на пробел между кавычками (" "): он нужен, чтобы числа печатались с пробелами между ними. Если убрать пробел (""), числа выведутся слитно, вот так: 1367. Вот код, который это показывает:

In [1]: my_list = [1, 3, 6, 7]

for number in my_list:
print(number, end=" ")

// 1 3 6 7


У print есть еще один параметр: sep. Мы используем sep, чтобы задать, чем разделять выводимые значения. Ниже в качестве разделителя используется символ /:

In [2]: print('12', '12', '1990', sep='/')

// 12/12/1990


👉 @PythonPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍259🤯3
Если ты только начинаешь с Python, остановись и внимательно посмотри

Не меняй список во время прохода по нему.

Когда ты модифицируешь список прямо во время итерации, итератор начинает путаться. Он не “знает”, что список изменился прямо у него под ногами.

Например, этот код сломан:

items = [1, 2, 2, 3, 4]
for item in items:
if item == 2:
items.remove(item)
print(items)
# Output: [1, 2, 3, 4]


Здесь мы используем remove(), чтобы удалить все двойки из списка. Но если посмотреть на вывод, одна 2 все равно осталась. Почему так происходит: когда ты удаляешь элемент из списка, все элементы справа сдвигаются влево. А цикл продолжает идти дальше. В итоге происходит вот что: находится и удаляется первая 2. Вторая 2 сдвигается на ее место. Цикл переходит к следующему индексу и пропускает эту 2.

Лучший способ сделать это: итерироваться по копии:

for item in items[:]:
if item == 2:
items.remove(item)
print(items)
# Output: [1, 3, 4]


Когда ты проходишь по копии (поверхностной копии), индексы в исходной копии не меняются.

Еще лучше использовать list comprehension:

items = [x for x in items if x != 2]


Никогда, ни при каких условиях не модифицируй список (или любую коллекцию) прямо во время итерации по нему. Итератор плохо переносит структурные изменения: он может пропускать элементы, обрабатывать один и тот же элемент дважды или (в некоторых случаях, например со словарями) выбрасывать RuntimeError. Это плохая практика.

👉 @PythonPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
32👍14🔥6🤣1
Ну что там

👉 @PythonPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
32🤣23
Google раздал шума: в Chrome выкатили ранний превью WebMCP, и это приподносят как замену веб-скрейпингу

Теперь любой сайт может стать нативным инструментом для AI-агентов. 😶

👉 @PythonPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
🤯219🤔1😢1
Немного базы Python. День 2: cлияние словарей

Если у тебя есть два словаря, которые нужно объединить, это можно сделать двумя простыми способами. Можно использовать оператор merge (|) или оператор (**). Ниже у нас есть два словаря: first_dict и second_dict. Мы будем использовать эти два метода, чтобы объединить словари. Вот код:

1️⃣ Использование оператора merge (|)

first_dict = {"kelly": 23,
"Derick": 14, "John": 7}
second_dict = {"Ravi": 45, "Mpho": 67}

combined_dict = first_dict | second_dict
print(combined_dict)


Вывод:

{'kelly': 23, 'Derick': 14, 'John': 7, 'Ravi': 45, 'Mpho': 67}


2️⃣Метод 2: использование оператора merge (**)

С этим оператором нужно поместить словари внутрь фигурных скобок. В коде ниже мы “подставляем” два словаря для объединения с помощью двух операторов *. Оба словаря заключены в фигурные скобки и разделены запятой.

first_dict = {"kelly": 23,
"Derick": 14, "John": 7}
second_dict = {"Ravi": 45, "Mpho": 67}

combined_dict = {**first_dict, **second_dict}
print(combined_dict)


Вывод:

{'kelly': 23, 'Derick': 14, 'John': 7, 'Ravi': 45, 'Mpho': 67}


👉 @PythonPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
32👍8🔥3🤝1
Please open Telegram to view this post
VIEW IN TELEGRAM
🤣57😁4
На Stepik добавили курс «Linux с нуля»

Этот курс закрывает всю обязательную Linux-базу для работы в IT. Подойдёт для:
- разработчиков
- девопсов и админов
- специалистов по данным и ML
- специалистов поддержки и сопровождения
- тестировщиков и безопасников


Внутри 20+ модулей: от установки Linux и работы с файлами до сетей, прав, дисков, процессов, автоматизации на Bash и многого другого. Всё сразу закрепляется на практике (200+ заданий с автопроверкой)

Материал подаётся понятным языком, шаг за шагом, на реальных примерах и с наглядными схемами

После прохождения вы получите сертификат, который можно добавить в резюме.

В ближайшие 48ч курс доступен со скидкой 30% по промокоду «23LINUX30»: открыть курс на Stepik
🤔63😁1🌚1🤣1
Ускорь JSON-ответы FastAPI в 2 раза, а то и больше

1. Обновись до только что вышедшего FastAPI 0.131.0
2. Объявляй response model (тип возврата)

После этого @pydantic будет заниматься JSON-сериализацией на стороне Rust 🦀

https://fastapi.tiangolo.com/advanced/custom-response/#json-performance

👉 @PythonPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍163🔥3🌚2
Немного базы. День 3: Календарь в Python

В Python есть встроенный модуль calendar. Мы можем импортировать этот модуль, чтобы вывести календарь. С календарём можно делать много разных вещей.

Допустим, мы хотим посмотреть апрель 2022 года. Мы используем класс month из модуля calendar и передадим год и месяц в качестве аргументов. См. ниже:

import calendar

month = calendar.month(2022, 4)
print(month)


Есть ещё много всего, что можно сделать с calendar. Например, с его помощью можно проверить, является ли заданный год високосным или нет. Давай проверим, високосный ли 2022 год.

import calendar

month = calendar.isleap(2022)
print(month)


False


👉 @PythonPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
22👍11
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥293😁3👀3👍2
This media is not supported in your browser
VIEW IN TELEGRAM
Совет для AI-инженеров 💡

Небольшая VLM, дообученная на вашем кастомном датасете, по точности может быть на уровне GPT-5 и при этом стоит в 50 раз дешевле.

Например, LFM2.5-VL-1.6B от Liquid Ai можно гонять локально на полной скорости через llama.cpp ↓

- Python CLI пример

👉 @PythonPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7👍53