Pythoner
7.22K subscribers
859 photos
27 videos
4 files
653 links
Полезные материалы по Python, которые будут интересны опытному и начинающему разработчику.

Сотрудничество - @flattys
Цены - @serpent_media

Канал на бирже: https://telega.in/c/pythonercode
Download Telegram
✈️Scrapy — это мощный фреймворк Python для автоматизированного сбора данных с веб-сайтов. Он позволяет легко парсить HTML-страницы, извлекать нужную информацию и сохранять ее в удобном формате (CSV, JSON и т.д.). Scrapy особенно полезен для проектов, связанных с анализом данных, мониторингом цен или сбором информации из интернета.

➡️Пример создания простого скрапера
Допустим, мы хотим собрать названия статей с новостного сайта с помощью Scrapy:

В папке news_scraper/spiders/ создайте файл news_spider.py со следующим содержимым:
import scrapy

class NewsSpider(scrapy.Spider):
name = 'news'
start_urls = ['https://example.com/news'] # URL сайта для парсинга

def parse(self, response):
# Извлекаем заголовки статей
for article in response.css('div.article'):
yield {
'title': article.css('h2.title::text').get(),
'link': article.css('a::attr(href)').get(),
}

# Переход на следующую страницу
next_page = response.css('a.next-page::attr(href)').get()
if next_page is not None:
yield response.follow(next_page, self.parse)

Далее запускаем с помощью команды:
scrapy crawl news -o news.json

⬆️Результат будет сохранен в файл news.json.

➡️Преимущества использования Scrapy

- Масштабируемость: Scrapy может обрабатывать тысячи страниц одновременно, что делает его идеальным для крупных проектов.

- Гибкость: Библиотека поддерживает различные типы запросов (GET, POST), аутентификацию, куки и работу с JavaScript через интеграцию с Selenium.

- Автоматизация: Scrapy позволяет настроить периодические задачи для регулярного сбора данных.

- Экономия времени: Вместо ручного копирования информации, Scrapy автоматизирует процесс, позволяя сосредоточиться на анализе данных.

- Поддержка различных форматов: Собранные данные можно экспортировать в CSV, JSON, XML и другие форматы без дополнительных усилий.


➡️Заключение
Scrapy — это не просто инструмент для веб-скрапинга, это целая экосистема, которая помогает эффективно решать задачи сбора данных. Его гибкость, масштабируемость и автоматизация делают его незаменимым для разработчиков, работающих с большими объемами информации.

🐍 Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍102🔥2
✈️Flask — это легковесный фреймворк Python для создания веб-приложений. Он предоставляет простой и гибкий инструментарий для разработки сайтов, API и других веб-сервисов. Flask особенно полезен для небольших проектов или прототипов, но может быть масштабирован до полноценных приложений.

➡️Пример создания простого веб-приложения

1. Установка Flask: Сначала установите библиотеку командой:
pip install flask


2. Создание приложения: Создайте файл app.py со следующим содержимым:
from flask import Flask, render_template, request

app = Flask(__name__)

# Главная страница
@app.route('/')
def home():
return "Добро пожаловать на мой сайт!"

# Страница приветствия
@app.route('/hello/<name>')
def hello(name):
return f"Привет, {name}!"

# Запуск приложения
if __name__ == '__main__':
app.run(debug=True)


3. Запуск приложения: Запустите скрипт командой:
python app.py


4. Тестирование: Откройте браузер и перейдите по адресу http://127.0.0.1:5000/. Вы увидите сообщение "Добро пожаловать на мой сайт!". Теперь попробуйте перейти по адресу http://127.0.0.1:5000/hello/Alice. Вы получите сообщение "Привет, Alice!".

🔎Как это работает?
- Определение маршрутов: Мы используем декоратор @app.route() для определения URL-адресов и соответствующих функций.

- Передача параметров: В примере /hello/<name> параметр name передается в функцию hello().

- Запуск сервера: Метод app.run() запускает локальный сервер для тестирования приложения.

➡️Если вы хотите углубиться в работу с Flask, вот несколько полезных ссылок:
Официальная документация Flask
Учебник по Flask

💡Заключение
Flask — это отличный выбор для создания веб-приложений в Python. Его простота и гибкость позволяют быстро реализовать идеи и протестировать их.

🐍 Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍63🔥2
✈️smtplib — это стандартная библиотека Python для отправки электронных писем через SMTP-серверы. Она позволяет легко отправлять сообщения, включая текст, файлы и HTML-контент. Отправка email может быть полезна для автоматических уведомлений, напоминаний или регулярных отчетов.

➡️Пример отправки простого email:
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart

# Настройки отправителя
sender_email = "your_email@gmail.com"
receiver_email = "recipient_email@example.com"
password = "your_password" # Введите пароль или токен приложения

# Создание сообщения
message = MIMEMultipart()
message['From'] = sender_email
message['To'] = receiver_email
message['Subject'] = "Тестовое сообщение из Python"

# Текст письма
body = "Привет! Это тестовое сообщение, отправленное с помощью Python."
message.attach(MIMEText(body, 'plain'))

# Подключение к SMTP-серверу Gmail
try:
server = smtplib.SMTP('smtp.gmail.com', 587)
server.starttls() # Шифрование соединения
server.login(sender_email, password) # Авторизация

# Отправка письма
text = message.as_string()
server.sendmail(sender_email, receiver_email, text)
print("Сообщение успешно отправлено!")
except Exception as e:
print(f"Ошибка отправки: {e}")
finally:
server.quit()


💡Важно: Для работы с Gmail необходимо использовать токен приложения вместо обычного пароля (включите двухфакторную аутентификацию и сгенерируйте токен).

➡️Пример отправки email с вложением:
from email.mime.base import MIMEBase
from email import encoders

# Добавляем вложение
filename = "example.txt"
with open(filename, "rb") as attachment:
part = MIMEBase("application", "octet-stream")
part.set_payload(attachment.read())

encoders.encode_base64(part)
part.add_header(
"Content-Disposition",
f"attachment; filename= {filename}",
)

message.attach(part)

# Отправляем письмо как раньше
server.sendmail(sender_email, receiver_email, message.as_string())
print("Сообщение с вложением успешно отправлено!")


➡️Основные функции библиотеки:

1. Создание SMTP-объекта - для подключения к почтовому серверу.
2. Аутентификация - возможность входа с использованием логина и пароля.
3. Отправка почты - метод для отправки электронных писем с указанным содержимым.

📖 Официальная документация smtplib

🐍 Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
7👍5🔥5
✈️Telethon — это асинхронная библиотека Python для работы с Telegram API. Она позволяет взаимодействовать с Telegram на уровне API, предоставляя возможность отправлять сообщения, получать обновления, работать с чатами, группами и каналами.

➡️Пример создания простого Telegram-бота:

1. Установка Telethon: Сначала установите библиотеку командой:
pip install telethon


2. Создание приложения в Telegram: Перейдите в Telegram API и создайте новое приложение, чтобы получить API ID и API Hash.

3. Код бота: Создайте файл bot.py со следующим содержимым:
from telethon import TelegramClient, events

# Настройки вашего приложения
api_id = 'YOUR_API_ID' # Введите ваш API ID
api_hash = 'YOUR_API_HASH' # Введите ваш API Hash

# Создание клиента
client = TelegramClient('session_name', api_id, api_hash)

@client.on(events.NewMessage)
async def handler(event):
# Проверяем, является ли сообщение от пользователя
if event.is_private:
sender = await event.get_sender()
username = sender.username
message = event.text

# Ответ на сообщение
await event.respond(f"Привет, {username}! Ты написал: {message}")

# Запуск клиента
with client:
print("Бот запущен. Нажмите Ctrl+C для остановки.")
client.run_until_disconnected()

4. Запустите бота командой:
python bot.py

⬆️Готово, теперь бот будет отвечать на все личные сообщения, которые он получает.

🔎Как это работает?

- Создание клиента: Мы используем TelegramClient для подключения к Telegram API с помощью вашего API ID и API Hash.

- Обработка событий: Метод @client.on(events.NewMessage) регистрирует обработчик для новых сообщений.

- Отправка ответа: Метод await event.respond() позволяет отправить ответное сообщение пользователю.

💡Заключение
Telethon — это мощный инструмент для работы с Telegram. Он особенно полезен для создания ботов, автоматизации задач и анализа данных из Telegram.

🐍 Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍75🔥1
👍71
Что выдаст код выше
Anonymous Quiz
16%
Python
2%
JavaScript
51%
C++
16%
Python, JavaScript, C++
16%
Error
🤔5👍3🤓2🤨1
🤔Разбор

Метод .pop удаляет из списка элемент по индексу, если индекс был передан. У нас индекса передано не было —> он удалит последний элемент (как по умолчанию).

НО! Мы принтуем НЕ список, а результат удаления. Прикол в том, что .pop помимо удаления, еще и возвращает удаленный элемент. То есть в принте будет выведен элемент, который мы удалили —> 'C++'

p.s. когда-то уже была такая задача, люди, давно подписанные, обладающие хорошей памятью, уже не ведутся на такие уловки))


🐍 Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🤯74😁3👀1
Forwarded from IT memer
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🤣6🔥3😁1
✈️argparse — это стандартная библиотека Python, которая позволяет создавать программные интерфейсы командной строки с поддержкой различных параметров и опций. С ее помощью можно легко добавлять флаги, позиционные аргументы и необязательные параметры для скриптов. Библиотека особенно полезна для создания утилит или автоматизированных скриптов, которые запускаются из терминала.

➡️Пример просто скрипта, который принимает имя пользователя и выводит приветствие:
import argparse

# Создаем парсер
parser = argparse.ArgumentParser(description="Программа для приветствия пользователя")

# Добавляем аргумент
parser.add_argument('--name', type=str, required=True, help="Имя пользователя")

# Парсим аргументы
args = parser.parse_args()

# Выводим приветствие
print(f"Привет, {args.name}!")


Запустить скрипт:
python script.py --name Alice


⬆️Результат:
Привет, Alice!


➡️Пример с несколькими аргументами:
import argparse

# Создаем парсер
parser = argparse.ArgumentParser(description="Программа для сбора информации о пользователе")

# Добавляем аргументы
parser.add_argument('--name', type=str, required=True, help="Имя пользователя")
parser.add_argument('--age', type=int, default=18, help="Возраст пользователя")
parser.add_argument('--city', type=str, default="Не указан", help="Город проживания")

# Парсим аргументы
args = parser.parse_args()

# Выводим информацию
print(f"Имя: {args.name}")
print(f"Возраст: {args.age}")
print(f"Город: {args.city}")


Запустить скрипт:
python script.py --name Bob --age 25 --city NewYork


⬆️Результат:
Имя: Bob
Возраст: 25
Город: NewYork


🔎Практическое применение:

— Создание утилит для обработки файлов (например, конвертация форматов).

— Разработка автоматизированных скриптов для анализа данных.

— Написание командных инструментов для администрирования систем.

🐍 Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1042
✈️Что такое очистка последовательности?

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


➡️Пример 1: Удаление дубликатов из списка:
# Исходный список
data = [1, 2, 2, 3, 4, 4, 5]

# Удаляем дубликаты с помощью множества
cleaned_data = list(set(data))

print("Исходный список:", data)
print("Очищенный список:", cleaned_data)

Результат:
Исходный список: [1, 2, 2, 3, 4, 4, 5]
Очищенный список: [1, 2, 3, 4, 5]


➡️Пример 2: Удаление пробельных символов из строки:
# Исходная строка
text = " Hello, World! This is a test. "

# Удаляем лишние пробелы
cleaned_text = ' '.join(text.split())

print("Исходная строка:", repr(text))
print("Очищенная строка:", repr(cleaned_text))

Результат:
Исходная строка: '  Hello,   World! This is a test.  '
Очищенная строка: 'Hello, World! This is a test.'


➡️Пример 3: Фильтрация элементов в списке:
# Исходный список
numbers = [3, -1, 0, 7, -5, 2]

# Фильтрация с помощью list comprehension
positive_numbers = [num for num in numbers if num > 0]

print("Исходный список:", numbers)
print("Очищенный список:", positive_numbers)

Результат:
Исходный список: [3, -1, 0, 7, -5, 2]
Очищенный список: [3, 7, 2]


➡️Заключение
Очистка последовательностей — это важный шаг в подготовке данных для анализа или обработки. который даёт чистоту данных, улучшение производительности и правильность результатов.

🐍 Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥43
✈️PyAutoGUI - это библиотека Python, которая позволяет автоматизировать взаимодействие с графическим пользовательским интерфейсом (GUI) на экране. С помощью PyAutoGUI вы можете выполнять различные действия, такие как перемещение мыши, клики, ввод текста, нажатие клавиш, создание скриншотов и многое другое.

➡️Некоторые основные возможности PyAutoGUI:

➡️ Управление мышью: Вы можете перемещать курсор мыши, кликать мышью в различных местах экрана, делать скриншоты и многое другое.

➡️ Управление клавиатурой: PyAutoGUI позволяет эмулировать ввод с клавиатуры, например, ввод текста и нажатие клавиш.

➡️ Определение положения объектов на экране: Библиотека позволяет определять координаты объектов на экране, что полезно при автоматизации задач.

➡️ Работа с окнами программ: PyAutoGUI предоставляет функционал для работы с окнами программ, такой как перемещение и изменение размеров окон.

➡️ Скриншоты: Вы можете делать скриншоты экрана и определять, что находится на экране в определенной области.

➡️ Определение цвета пикселя: Библиотека позволяет определять цвет пикселя на экране, что может быть полезно для определения элементов интерфейса.

💡Будьте осторожны при использовании PyAutoGUI, так как автоматизация взаимодействия с GUI может вызвать неожиданные результаты. Однако, эта библиотека может быть очень полезной в автоматизации рутинных задач или тестировании программного обеспечения.

🐍 Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍124🔥3
✈️Scikit-learn - это библиотека машинного обучения для Python, которая предоставляет инструменты и алгоритмы для построения моделей машинного обучения, обработки данных и оценки их качества.

➡️Основные преимущества Scikit-learn:
— Легкость использования.
— Широкий выбор алгоритмов.
— Хорошая документация и активное сообщество.

➡️Пример: Классификация с использованием метода k-ближайших соседей (k-NN):
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score

# Загружаем набор данных Iris
data = load_iris()
X = data.data # Признаки
y = data.target # Целевые метки

# Разделяем данные на обучающую и тестовую выборки
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Создаем модель k-NN
model = KNeighborsClassifier(n_neighbors=3)

# Обучаем модель
model.fit(X_train, y_train)

# Делаем предсказания
predictions = model.predict(X_test)

# Оцениваем точность модели
accuracy = accuracy_score(y_test, predictions)
print(f"Точность модели: {accuracy:.2f}")

⬆️Результат:
Точность модели: 1.00


⬆️Как это работает?
- Загрузка данных: Мы используем встроенный набор данных Iris из sklearn.datasets.

- Разделение данных: Метод train_test_split() разделяет данные на обучающую и тестовую выборки.

- Создание модели: Мы создаем экземпляр классификатора KNeighborsClassifier с параметром n_neighbors=3.

- Обучение модели: Метод .fit() обучает модель на обучающей выборке.

- Оценка точности: Мы сравниваем предсказания модели с реальными значениями и вычисляем точность.

💡Заключение
Scikit-learn — это отличный инструмент для начала работы с машинным обучением. Библиотека содержит множество классических алгоритмов, таких как SVM, случайные леса, наивный Байес и другие, а также инструменты для предобработки данных, выбора признаков, кросс-валидации и оценки моделей. Scikit-learn имеет простой и понятный API, что делает ее прекрасным выбором для начинающих в области машинного обучения.

🐍 Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥54
👴У владельца "Pythoner" появился блог!

Рассказываю про telegram без программирования: https://t.me/+tMKLZLAdrzcwZTVi
Please open Telegram to view this post
VIEW IN TELEGRAM
5🔥2🥰2👍1
Forwarded from IT memer
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11🤣7😁3
✈️DABL (Data Analytics in Business Language) — это библиотека Python, которая упрощает использование машинного обучения для анализа данных. Она предоставляет простой и понятный интерфейс для создания моделей машинного обучения, а также для их обучения и оценки.

🔎Основные возможности DABL:
- Автоматическая предобработка данных.
- Выбор оптимальной модели для задач классификации или регрессии.
- Генерация отчетов о данных и результатах модели.

➡️Пример использования DABL. Допустим, мы хотим решить задачу классификации на основе датасета Iris:
from sklearn.datasets import load_iris
from dabl import SimpleClassifier

# Загружаем набор данных Iris
data = load_iris()
X = data.data # Признаки
y = data.target # Целевые метки

# Создаем и обучаем простой классификатор
clf = SimpleClassifier(random_state=42)
clf.fit(X, y)

# Оцениваем точность модели
print(f"Точность модели: {clf.score(X, y):.2f}")

# Печатаем отчет о данных
clf.report()


⬆️Результат:
Точность модели: 1.00

В отчете clf.report() вы получите подробную информацию о данных, включая статистику признаков, распределение классов и характеристики выбранной модели.


💡Практическое применение:
- Быстрая оценка качества различных моделей на одном наборе данных.
- Автоматическая подготовка данных для машинного обучения.
- Генерация отчетов о данных для аналитических целей.

🐍 Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍83🔥2
✈️defaultdict — это подкласс словаря в модуле collections, который автоматически создает значения для несуществующих ключей. Это особенно полезно, когда вы работаете со словарями и хотите избежать ошибок, связанных с отсутствием ключей.

➡️Пример использования defaultdict:
from collections import defaultdict

# Создаем defaultdict с типом значения по умолчанию — список
my_dict = defaultdict(list)

# Добавляем элементы
my_dict['fruits'].append('apple')
my_dict['fruits'].append('banana')
my_dict['vegetables'].append('carrot')

print(my_dict)


⬆️Результат:
defaultdict(<class 'list'>, {
'fruits': ['apple', 'banana'],
'vegetables': ['carrot']
})


➡️Сравнение с обычным словарем:
# Без defaultdict
my_dict = {}
if 'fruits' not in my_dict:
my_dict['fruits'] = []
my_dict['fruits'].append('apple')

# С defaultdict
my_dict = defaultdict(list)
my_dict['fruits'].append('apple')


⬆️defaultdict делает код чище, удобнее и помогает избежать ошибок.

💡Заключение
defaultdict — это инструмент, который делает работу со словарями проще, чище и эффективнее. Он избавляет от необходимости проверять существование ключей, автоматически создавая значения по умолчанию, что упрощает код и делает его более читабельным. Благодаря своей гибкости, defaultdict позволяет использовать любые типы данных по умолчанию, будь то списки, числа или множества.

🐍 Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍134🔥4
✈️Сегодня решаем задачу, с которой часто сталкиваются аналитики данных: как объединить несколько CSV-файлов в один . Это полезно, если у вас есть данные, разбитые по дням, месяцам или категориям, и вы хотите собрать их в единый датасет для анализа.

➡️Задача: У нас есть несколько CSV-файлов (file1.csv, file2.csv, file3.csv), каждый из которых содержит данные с одинаковой структурой. Нужно объединить их в один файл.

➡️Решение:
import pandas as pd
import glob

# Шаг 1: Собираем все CSV-файлы из папки
files = glob.glob("data/*.csv") # Указываем путь к файлам
dfs = [pd.read_csv(file) for file in files] # Читаем каждый файл в DataFrame

# Шаг 2: Объединяем все DataFrame в один
combined_df = pd.concat(dfs, ignore_index=True)

# Шаг 3: Сохраняем результат в новый CSV-файл
combined_df.to_csv("combined_data.csv", index=False)

print("Все файлы успешно объединены!")


⬆️Как это работает:
- glob.glob("data/*.csv"): Находит все CSV-файлы в указанной папке.

- pd.read_csv(file): Читает каждый файл в DataFrame.

- pd.concat(dfs, ignore_index=True): Объединяет все DataFrame в один, игнорируя старые индексы.

- to_csv("combined_data.csv", index=False): Сохраняет объединённые данные в новый файл без дополнительного индекса.

💡Дополнительно:
Если файлы имеют разную структуру (например, разные столбцы), можно использовать параметр join="inner" или join="outer" в функции pd.concat().

join="inner": Оставит только общие столбцы.
join="outer": Включит все столбцы, заполняя пропуски значением NaN.

🐍 Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍143🔥2
✈️Bokeh — это библиотека визуализации данных для создания интерактивных и информативных графиков и диаграмм в веб-приложениях. С её помощью можно легко создавать красивые и наглядные визуализации данных, которые могут быть встроены в веб-страницы.

➡️Пример использования Bokeh:
from bokeh.plotting import figure, show, output_file

# Исходные данные
x = [1, 2, 3, 4, 5]
y = [6, 7, 2, 4, 5]

# Создаем график
plot = figure(title="Простой график", x_axis_label='x', y_axis_label='y')
plot.line(x, y, legend_label="Тренд", line_width=2)

# Сохраняем результат в файл
output_file("line.html")

# Показываем график
show(plot)


⬆️Результат:
После выполнения кода откроется окно браузера с интерактивным графиком, где можно приближать, отдалять и перемещать данные.

➡️Пример добавления интерактивности:
from bokeh.models import HoverTool
from bokeh.plotting import figure, show

# Исходные данные
x = [1, 2, 3, 4, 5]
y = [6, 7, 2, 4, 5]

# Создаем график
plot = figure(title="Интерактивный график", tools="pan,wheel_zoom,box_zoom,reset")
plot.circle(x, y, size=10, color="navy", alpha=0.5)

# Добавляем инструмент HoverTool для подсказок
hover = HoverTool(tooltips=[("x", "@x"), ("y", "@y")])
plot.add_tools(hover)

# Показываем график
show(plot)


💡Заключение:
Bokeh — это мощный инструмент для создания интерактивных визуализаций данных в Python. Он идеально подходит для аналитиков, учетных данных и разработчиков, которым нужна возможность создавать сложные графики с минимальными усилиями.

🐍 Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍72🔥2
Forwarded from IT memer
Please open Telegram to view this post
VIEW IN TELEGRAM
😁16🤣9👍2
✈️Что такое itertools.chain?
itertools.chain — это полезная функция из стандартной библиотеки Python для объединения нескольких итерируемых объектов (списки, кортежи и т.д.) в один. Она помогает обходить несколько коллекций последовательно, как будто они являются одной.

➡️Пример объединение списков:
from itertools import chain

# Исходные данные
list1 = [1, 2, 3]
list2 = [4, 5, 6]
list3 = [7, 8, 9]

# Объединяем списки с помощью chain
combined = chain(list1, list2, list3)

print("Объединенный результат:")
for item in combined:
print(item, end=" ") # Вывод: 1 2 3 4 5 6 7 8 9


➡️Пример использования itertools.chain с разными типами данных:
from itertools import chain

# Разные типы данных
data1 = [10, 20, 30]
data2 = ('a', 'b', 'c')
data3 = range(3)

# Объединяем все вместе
result = list(chain(data1, data2, data3))

print("Результат после объединения:")
print(result) # Вывод: [10, 20, 30, 'a', 'b', 'c', 0, 1, 2]


💡itertools.chain позволяет эффективно работать с несколькими последовательностями как с одной, не создавая дополнительных списков и не тратя лишние ресурсы на их хранение в памяти.

🐍 Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥4🤔4🗿1