pythonportal | Unsorted

Telegram-канал pythonportal - Python Portal

58174

Всё самое интересное из мира Python Связь: @devmangx РКН: https://clck.ru/3GMMF6

Subscribe to a channel

Python Portal

Немного базы Python. День 6 - Обмен значениями переменных

В Python можно менять местами переменные после того, как им уже присвоены объекты. Ниже мы сначала присваиваем 20 переменной x и 30 переменной y, а потом меняем их местами: x становится 30, а y становится 20. Этот способ называется упаковкой и распаковкой кортежа (tuple packing/unpacking).

x, y = 20, 30
x, y = y, x

print('x is: ', x)
print('y is: ', y)


x is 30
y is 20


Также можно использовать оператор XOR (exclusive or), чтобы поменять переменные местами. Это трехшаговый метод. В примере ниже мы меняем местами значения x и y.

x = 20
y = 30

# шаг первый
x ^= y
# шаг второй
y ^= x
# шаг третий
x ^= y

print(f'x is: {x}')
print(f'y is: {y}')


x is: 30
y is: 20


Также можно использовать арифметические операции (сложение и вычитание), чтобы поменять переменные местами без временной переменной. Однако этот метод рекомендуется для обмена переменных числовых типов данных. Вот пример:

# Используем арифметические операции
x = 5
y = 10

x = x + y
y = x - y
x = x - y

print("After swapping:")
print("x =", x)
print("y =", y)


After swapping:
x = 10
y = 5


В результате этих арифметических операций значения x и y были фактически поменяны местами. После обмена x содержит исходное значение y (10), а y содержит исходное значение x (5).

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

👉 @PythonPortal #100daysofpython

Читать полностью…

Python Portal

Главное захотеть 🧠

👉 @PythonPortal

Читать полностью…

Python Portal

Чувак сжал 2,87 ГБ данных до 8,9 МБ (!) с помощью своего кастомного компрессора данных :D

Там было 21k JSON-файлов с данными о крикетных матчах, он использовал их структуру и сжал это до ~42,46 МБ

Максимум, что смог gzip, это ~53 МБ, а 7z ~45 МБ.

Потом он скомбинировал свой компрессор + 7z и ужал до 8,9 МБ

Это ЧИСТАЯ случайность, дальше сжать уже просто нельзя.

Ему пришлось почитать про энтропию Шеннона и алгоритмическое сжатие данных

Полный разбор в GitHub-репозитории 😎

👉 @PythonPortal

Читать полностью…

Python Portal

Совет для AI-инженеров 💡

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

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

- Python CLI пример

👉 @PythonPortal

Читать полностью…

Python Portal

Немного базы. День 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 #100daysofpython

Читать полностью…

Python Portal

На Stepik добавили курс «Linux с нуля»

Этот курс закрывает всю обязательную Linux-базу для работы в IT. Подойдёт для:

- разработчиков
- девопсов и админов
- специалистов по данным и ML
- специалистов поддержки и сопровождения
- тестировщиков и безопасников


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

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

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

В ближайшие 48ч курс доступен со скидкой 30% по промокоду «23LINUX30»: открыть курс на Stepik

Читать полностью…

Python Portal

Немного базы 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

Читать полностью…

Python Portal

Ну что там

👉 @PythonPortal

Читать полностью…

Python Portal

Немного базы 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

Читать полностью…

Python Portal

Некоторые 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

Читать полностью…

Python Portal

😄😄😄

👉 @PythonPortal

Читать полностью…

Python Portal

Посмотрим как ты знаешь классы в Python 🤩

Вопрос по Python:

Какой будет вывод у этого кода и почему?

👉 @PythonPortal

Читать полностью…

Python Portal

В Python 3.15 появится полноценный иммутабельный словарь.

В модуль builtins добавляется новый публичный неизменяемый тип frozendict.

Ожидается, что frozendict будет “safe by design”, потому что он предотвращает любые непреднамеренные изменения. Это полезно не только для стандартной библиотеки CPython, но и для сторонних мейнтейнеров: можно опираться на надежный неизменяемый тип словаря.

Зачем это вообще нужно:

▪️Хочешь использовать мапу как ключ в другом dict или засунуть в set? Обычный dict нельзя, а frozendict можно (если значения тоже хэшируемые).
▪️ @functools.lru_cache() и аргументы-словари: с dict будет сложно, с frozendict нормально.
▪️Дефолты в аргументах функций: вместо “мутабельного дефолта” можно давать frozendict(...) и не ловить сюрпризы.

Как выглядит по API:

▪️Конструктор “как у dict”: frozendict(), frozendict(**kwargs), frozendict(mapping) или iterable пар, плюс можно смешивать с **kwargs.
▪️Порядок вставки сохраняется (как в обычном dict).
▪️Хэш не зависит от порядка элементов (логика через frozenset(items)), и сравнение тоже по содержимому, а не по порядку.
▪️Есть объединение через | и “обновление” |= (но |= не мутирует объект, а создает новый).
▪️.copy() в CPython по сути возвращает тот же объект (shallow), а если надо глубоко, то copy.deepcopy().
Важный момент: frozendict НЕ наследуется от dict. Это специально, чтобы нельзя было обойти “неизменяемость” вызовом dict.__setitem__ и подобных трюков.

И бонус для stdlib: авторы наметили места, где можно заменить константные/публичные мапы на frozendict (в том числе там, где сейчас MappingProxyType).

👉 @PythonPortal

Читать полностью…

Python Portal

Твоя Python-прога может внезапно встать колом на несколько секунд. Обычно виноват garbage collector, который пошел “наводить порядок” в памяти.

И важный момент: это может случиться даже если ты сейчас почти не аллоцируешь и не освобождаешь память. И пауза не из-за того, что он долго “чистит” память в прямом смысле.

Достаточно, чтобы программа когда-то создала очень много объектов. Даже если ты эти объекты удержал (они живые и никуда не деваются), проблема все равно останется.

В Python есть инструменты, чтобы с этим разбираться. А если спросишь, твой любимый ИИ разложит все по полочкам.

Читать статью 🙈

👉 @PythonPortal

Читать полностью…

Python Portal

Кто-то собрал ИИ, который одновременно пишет код и лазит по вебу.

Называется Accomplish и работает локально, не сжигая API-кредиты.

Без Claude Desktop. Без Cursor. Без ежемесячных подписок.

Большинство AI-инструментов для кодинга заставляют выбирать что-то одно:

Claude Desktop → только работа с компьютером
Cursor → только кодинг
Windsurf → только кодинг

Accomplish объединяет обе возможности, чтобы Claude мог и изучить библиотеку, и сразу внедрить ее, не переключаясь между инструментами.

Ты просишь: "Найди самые свежие доки Stripe API и собери платежную интеграцию"

Accomplish:

1. Открывает браузер → читает документацию Stripe

2. Пишет Python-код на основе актуального API

3. Тестирует интеграцию

4. Дебажит ошибки

Все в одной сессии. Без переключения контекста.

100% open source.

👉 @PythonPortal

Читать полностью…

Python Portal

Перестаньте использовать if obj == None, используйте if obj is None

В Python, когда вы пишете:

obj == None


вы не проверяете напрямую, является ли obj значением None. Вместо этого вы спрашиваете, равен ли объект None.

Да, во многих случаях результат будет таким же, как у кода:

obj is None


Но поведение у этих двух вариантов разное, и эта разница важна.

Когда вы используете:

obj == None


Python вызывает метод __eq__ у объекта. То есть сам объект решает, что значит "равен None". А этот метод можно переопределить.

Если obj это экземпляр класса, в котором __eq__ реализован так, что при сравнении с None возвращается True (даже если объект на самом деле не None), тогда obj == None может ошибочно дать True.

Пример:

class Weird:
def __eq__(self, other):
return True # Всегда утверждает, что равен

obj = Weird()

print(obj == None) # True
print(obj is None) # False


Здесь видно, что obj == None возвращает True из-за кастомного поведения оператора __eq__ в классе.

Из этого следует, что при использовании obj == None результат не всегда предсказуем.

С другой стороны, когда вы пишете:

obj is None


вы используете оператор is, который нельзя переопределить. Это значит, что результат всегда будет одинаковым и предсказуемым.

Оператор is проверяет идентичность объектов, то есть указывают ли две ссылки на один и тот же объект. Поскольку None это singleton (единственный экземпляр), obj is None это правильный и самый эффективный способ такой проверки.

❤️ Поэтому всегда рекомендуется, и это best practice, использовать obj is None вместо obj == None ради предсказуемости и эффективности.

👉 @PythonPortal

Читать полностью…

Python Portal

Немного базы Python. День 5. Сортировка списка по убыванию

Метод sort() сортирует список по возрастанию (по умолчанию).

Чтобы sort() работал, элементы списка должны быть одного типа. Нельзя сортировать список со смешанными типами данных, например числа и строки.

У метода sort() есть параметр reverse; чтобы отсортировать список по убыванию, установите reverse=True.

list1 = [2, 5, 6, 8, 1, 8, 9, 11]

list1.sort(reverse=True)
print(list1)

# [11, 9, 8, 8, 6, 5, 2, 1]


Помните: sort() это строго метод списка (list). Его нельзя использовать для сортировки set, tuple, string или dictionary.

Метод sort() не возвращает новый список; он сортирует существующий список на месте (in place).

Если вы попробуете создать новый объект с помощью sort(), он вернет None. Пример ниже:

list1 = [2, 5, 6, 8, 1, 8, 9, 11]
list2 = list1.sort(reverse=True)
print(list2)

# None


У метода sort() есть необязательный параметр key, который позволяет настроить поведение сортировки.

Этот параметр используется для передачи функции, которая задает критерий сортировки элементов списка.

В примере ниже у нас список кортежей, и мы хотим отсортировать его по возрасту студента. Используя параметр key вместе с lambda-функцией, можно реализовать такую кастомную сортировку. См. ниже:

students = [
("Alice", 22),
("Bob", 20),
("Charlie", 24)
]

# Сортируем студентов по возрасту, используя lambda-функцию как key
students.sort(key=lambda students: students[1])
print(students)

# [('Bob', 20), ('Alice', 22), ('Charlie', 24)]


Метод sort() является стабильным (stable), то есть сохраняет относительный порядок равных элементов в отсортированном списке.

Если у двух элементов одинаковый ключ сортировки, их исходный порядок сохраняется. Например, если у "Alice" и "Bob" одинаковый возраст, их порядок останется прежним. Это и называется стабильной сортировкой (stable sorting). См. пример:

students = [
("Alice", 22),
("Bob", 22),
("Charlie", 24)
]

# Сортируем студентов по возрасту, используя lambda-функцию как key
students.sort(key=lambda students: students[1])
print(students)

# [('Alice', 22), ('Bob', 22), ('Charlie', 24)]


Как видно, порядок элементов "Alice" и "Bob" не изменился, потому что у них одинаковый возраст.

👉 @PythonPortal #100daysofpython

Читать полностью…

Python Portal

Немного базы Python. День 4: Получение текущего времени и даты

Ниже приведенный код показывает, как можно получить текущее время с помощью модуля datetime. Метод now() возвращает объект datetime, представляющий текущие дату и время в соответствии с системными часами. Метод strftime() форматирует время для нужного вывода. Этот код показывает, как использовать модуль datetime вместе с методом strftime(), чтобы получить отформатированную строку времени в формате часов, минут и секунд.

from datetime import datetime

time_now = datetime.now().strftime('%H:%M:%S')
print(f'Текущее время: {time_now}')


Текущее время: 17:37:28


Что, если мы хотим вернуть сегодняшнюю дату? Мы можем использовать date из модуля datetime. Ниже используется метод today():

from datetime import date

today_date = date.today()
print(today_date)


2023-09-20


👉 @PythonPortal #100daysofpython

Читать полностью…

Python Portal

Конец игры

👉 @PythonPortal

Читать полностью…

Python Portal

Ускорь JSON-ответы FastAPI в 2 раза, а то и больше

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

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

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

👉 @PythonPortal

Читать полностью…

Python Portal

HTTP против HTTPS наглядно

👉 @PythonPortal

Читать полностью…

Python Portal

Google раздал шума: в Chrome выкатили ранний превью WebMCP, и это приподносят как замену веб-скрейпингу

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

👉 @PythonPortal

Читать полностью…

Python Portal

Если ты только начинаешь с 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

Читать полностью…

Python Portal

Согласны?

👉 @PythonPortal

Читать полностью…

Python Portal

Делюсь этим Python-скриптом под OSINT: это простая, но полезная штука для расследований по возможным группам киберпреступности, потому что она позволяет в реальном времени логировать статусы присутствия в Telegram. Мониторинг определяет такие состояния:

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

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

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

👉 @PythonPortal

Читать полностью…

Python Portal

Этот тул умеет скачивать буквально что угодно по ссылке

100% бесплатно. опенсорс. без рекламы.

https://cobalt.tools/

👉 @PythonPortal

Читать полностью…

Python Portal

Разраб придумал гениальную капчу против ИИ-агентов: чтобы записаться к нему на созвон, нужно 10 раз громко сказать «NIGGA».

👉 @PythonPortal

Читать полностью…

Python Portal

О, прогресс

👉 @PythonPortal

Читать полностью…

Python Portal

🔥 Пожизненная PRO-подписка на easyoffer по цене одного года.

Беспрецедентная акция на PRO-тариф сайта для подготовки к собеседованию на программиста, тестировщика, проектного менеджера и другие IT-профессии.

⚙️ Доступные функции сейчас:
1. База вопросов из реальных технических собеседований с вероятностью встречи и примерами ответов.
2. База задач с этапа live-coding.
3. База 1100+ реальных собеседований, в том числе в топовые компании (Сбер, Авито, Яндекс, WB, OZON, МТС и др.) на позиции Junior/Middle/Senior.
4. База 400+ тестовых заданий от компаний.
5. Аналитика ТОП-требований из вакансий для лучшего написания резюме по ключевым словам.
6. Тренажеры для подготовки к собеседованию. В том числе тренажер «Реальное собеседование» со сценарием вопросов под конкретную компанию.

⌛️ Функции, которые появятся в ближайшие полгода:
1. Агрегатор вакансий из Telegram, сайтов компаний и джоббордов.
2. Улучшение и оптимизация резюме, чтобы проходить ATS-системы.
3. Генерация уникального резюме и сопроводительного письма под вакансию.

Акция до 20 февраля (включительно) на PRO-тариф. Покупаешь сейчас один раз — пользуешься всю жизнь без лимита, включая все будущие функции.

👉 Смотри подробности тарифа и покупай на easyoffer

Читать полностью…

Python Portal

Пока ElevenLabs 🤩

Вышел новый сервис Voicebox и он клонирует почти любой голос всего по нескольким секундам аудио и полностью локально на твоей машине.

Без загрузок в облако. Никакие голосовые данные не покидают девайс.

Работает на Qwen3-TTS, прорывной голосовой модели от Alibaba.

→ Загружаешь пару секунд аудио
→ Получаешь почти идеальный клон голоса
→ Генеришь речь на любом языке
→ Миксуешь мульти-голосовые диалоги в DAW-подобном таймлайне

Всё локально. Ноль зависимости от облака.

100% open source. Лицензия MIT.

macOS + Windows уже доступны. Linux скоро.

👉 @PythonPortal

Читать полностью…
Subscribe to a channel