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

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

Канал на бирже: https://telega.in/c/pythonercode
Download Telegram
✈️FastStream - это мощная библиотека для Python, которая упрощает создание и управление потоковыми приложениями. Она предоставляет удобный интерфейс для работы с различными брокерами сообщений, такими как Kafka и RabbitMQ.

➡️Основные преимущества FastStream
💬Простота использования
💬Высокая производительность
💬Поддержка асинхронного программирования
💬Легкая интеграция с существующими проектами

➡️Установка FastStream

Для начала работы с FastStream, установите библиотеку с помощью pip:

pip install faststream


➡️Давайте рассмотрим простой пример использования FastStream с Kafka:

from faststream import FastStream, Logger
from faststream.kafka import KafkaBroker

# Создаем брокер Kafka
broker = KafkaBroker("localhost:9092")

# Инициализируем FastStream
app = FastStream(broker)

# Определяем обработчик сообщений
@broker.subscriber("input-topic")
async def process_message(msg: str, logger: Logger):
logger.info(f"Получено сообщение: {msg}")
# Обработка сообщения
processed_msg = msg.upper()
# Отправка обработанного сообщения
await broker.publish(processed_msg, "output-topic")

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


⬆️В этом примере мы:
1. Импортируем необходимые модули из FastStream.
2. Создаем брокер Kafka, указывая адрес сервера.
3. Инициализируем FastStream с нашим брокером.
4. Определяем функцию-обработчик сообщений с декоратором @broker.subscriber.
5. В обработчике мы логируем полученное сообщение, преобразуем его в верхний регистр и отправляем в другую тему.
6. Запускаем приложение с помощью app.run().

🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍74🔥3
✈️Что такое concurrent.futures?

Представьте, что вы супергерой, способный делать несколько дел одновременно. Это и есть concurrent.futures! Этот мощный модуль в Python позволяет вам выполнять задачи параллельно, экономя драгоценное время и ресурсы.

➡️Основные инструменты

В нашем арсенале два главных оружия:
💬ThreadPoolExecutor - для задач, связанных с вводом-выводом
💬ProcessPoolExecutor - для вычислительно-интенсивных задач

➡️Простой пример использования ThreadPoolExecutor:

import concurrent.futures
import time

def task(name):
print(f"Задача {name} начата")
time.sleep(2)
return f"Задача {name} завершена"

with concurrent.futures.ThreadPoolExecutor(max_workers=3) as executor:
tasks = [executor.submit(task, f"#{i}") for i in range(5)]

for future in concurrent.futures.as_completed(tasks):
print(future.result())

⬆️Мы только что создали многопоточное приложение, которое выполняет 5 задач параллельно, используя пул из 3 потоков.

🔎Преимущества использования concurrent.futures
💬Повышение производительности
💬Простота использования
💬Автоматическое управление потоками
- 💬Гибкость в настройке

➡️Заключение

Поздравляем! Теперь вы знаете, как создавать многопоточные приложения с помощью concurrent.futures. Это мощный инструмент, который поможет вам писать более эффективный и быстрый код. Не забывайте практиковаться и экспериментировать - ведь в мире многопоточности возможности безграничны!

🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥43
Forwarded from IT memer
Please open Telegram to view this post
VIEW IN TELEGRAM
🤣17👍3😁2
➡️Зачем нужно профилирование?

Представьте, что ваш код - это спортивный автомобиль. Профилирование - это как диагностика двигателя. Оно помогает найти "узкие места" и раскрыть истинный потенциал вашего кода.

➡️cProfile: Ваш верный помощник

cProfile - это встроенный инструмент Python для профилирования. Он как супергерой, который анализирует каждую функцию вашего кода.

import cProfile

def my_function():
# Ваш код здесь
pass

cProfile.run('my_function()')

⬆️Теперь у вас есть детальный отчет о работе вашей функции.

➡️line_profiler: Микроскоп для вашего кода

Если cProfile - это общая картина, то line_profiler - это микроскоп. Он анализирует каждую строку кода. Потрясающе, не так ли?

@profile
def my_function():
# Ваш код здесь
pass

# Запустите с: kernprof -l -v your_script.py

⬆️Теперь вы видите, сколько времени занимает каждая строка. Это как рентген для вашего кода!

➡️Практические советы:
💬Профилируйте регулярно: Это как чистка зубов для вашего кода!
💬Фокусируйтесь на горячих точках: 80% времени обычно тратится на 20% кода.
💬Не оптимизируйте преждевременно: Сначала убедитесь, что код работает правильно.

➡️Заключение:
Профилирование - это ваш секретный ингредиент для создания быстрого и эффективного Python-кода. С cProfile и line_profiler в вашем арсенале, вы готовы покорить любые вершины производительности!

🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
5👍3🔥1
✈️Функция sample() позволяет выбрать случайным образом элементы из последовательности или коллекции. Это удобно при необходимости получить случайную выборку из данных.

➡️Функция принимает два основных аргумента:
💬population — последовательность, из которой надо выбрать элементы (list, tuple, string и т. д.)
💬k — количество элементов для выборки.

➡️Дополнительные аргументы:
💬counts — список весов элементов (по умолчанию равновероятный выбор).
💬rng — генератор случайных чисел (по умолчанию берется из модуля random).

➡️Пример:
from random import sample

letters = ['a', 'b', 'c', 'd', 'e']

result = sample(letters, k=3)

print(result)


⬆️В примере из списка букв берется случайная выборка размером 3 элемента. Результат при каждом запуске будет разный.

🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍73🔥21
✈️В мире современных технологий машинное обучение играет ключевую роль. Одним из самых популярных инструментов для разработки и обучения нейронных сетей является PyTorch.

PyTorch - это открытая библиотека машинного обучения, разработанная Facebook AI Research. Она предоставляет гибкий и интуитивно понятный интерфейс для создания сложных нейронных сетей.

➡️Основы создания нейронной сети в PyTorch.
Создание нейронной сети в PyTorch начинается с определения архитектуры. Вот простой пример:

import torch.nn as nn

class SimpleNN(nn.Module):
def __init__(self):
super(SimpleNN, self).__init__()
self.fc1 = nn.Linear(784, 128)
self.fc2 = nn.Linear(128, 10)

def forward(self, x):
x = torch.relu(self.fc1(x))
x = self.fc2(x)
return x

⬆️Этот код определяет простую нейронную сеть с двумя полносвязными слоями.

➡️Обучение нейронной сети

Обучение - это процесс, в котором сеть корректирует свои веса для минимизации ошибки предсказания. Вот базовый цикл обучения:

optimizer = torch.optim.Adam(model.parameters(), lr=0.001)
criterion = nn.CrossEntropyLoss()

for epoch in range(num_epochs):
for batch in data_loader:
optimizer.zero_grad()
outputs = model(batch)
loss = criterion(outputs, targets)
loss.backward()
optimizer.step()


➡️Преимущества PyTorch
💬Динамические вычислительные графы
💬Простота отладки
💬Богатая экосистема и сообщество
💬Интеграция с Python

➡️Заключение
PyTorch предоставляет мощный и гибкий инструментарий для создания и обучения нейронных сетей. С его помощью вы можете реализовать самые современные алгоритмы машинного обучения и решать сложные задачи в области искусственного интеллекта.

🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍76🔥5
✈️Анализ текста с помощью spaCy

➡️Токенизация и лемматизация
SpaCy предоставляет эффективные инструменты для разбиения текста на токены и определения их базовых форм:

import spacy

nlp = spacy.load("ru_core_news_sm")
doc = nlp("Кошки любят спать на мягких подушках.")

for token in doc:
print(f"{token.text} -> {token.lemma_}")


➡️Определение частей речи
SpaCy автоматически определяет части речи для каждого токена:

for token in doc:
print(f"{token.text} - {token.pos_}")


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

for ent in doc.ents:
print(f"{ent.text} - {ent.label_}")


➡️Генерация текста с использованием spaCy
Хотя spaCy в первую очередь предназначен для анализа текста, его можно использовать и для помощи в генерации:

➡️Использование зависимостей для построения предложений
SpaCy определяет синтаксические зависимости между словами, что может быть использовано для создания новых предложений:

def generate_sentence(subject, verb, object):
doc = nlp(f"{subject} {verb} {object}")
return " ".join([token.text for token in doc])

print(generate_sentence("Программист", "пишет", "код"))


➡️Использование векторных представлений слов
Векторные представления слов в spaCy могут быть использованы для поиска семантически близких слов:

def find_similar_word(word, n=3):
token = nlp(word)[0]
similar_words = []
for lex in nlp.vocab:
if lex.has_vector:
if lex.is_lower == token.is_lower and lex.is_alpha:
similarity = token.similarity(lex)
similar_words.append((lex.text, similarity))
return sorted(similar_words, key=lambda x: x[1], reverse=True)[:n]

print(find_similar_word("компьютер"))


🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
5👍3🔥1
Python keywords - это зарезервированные слова в языке программирования Python, которые имеют специальное значение и не могут быть использованы в качестве идентификаторов (названий переменных, функций и т.д.) в программах.

🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍112🔥2
➡️Основные возможности GeoPandas

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

➡️Ключевые особенности:
💬Поддержка различных форматов геоданных (Shapefile, GeoJSON и др.)
💬Геометрические операции (пересечение, объединение, буферизация)
💬Пространственные соединения и агрегации
💬Интеграция с matplotlib для визуализации

➡️Простой пример:
import geopandas as gpd

# Чтение геоданных
gdf = gpd.read_file('path/to/your/geodata.shp')

# Базовые операции
print(gdf.head())
print(gdf.crs) # Система координат


➡️Практические примеры использования

Визуализация данных
import matplotlib.pyplot as plt

gdf.plot()
plt.title('Визуализация геоданных')
plt.show()


➡️Пространственные операции

Выполнение геометрических операций, таких как буферизация:
buffered = gdf.geometry.buffer(1)  # Создание буфера в 1 единицу


➡️Пространственные соединения

Объединение двух наборов геоданных на основе их пространственных отношений:
cities = gpd.read_file('cities.shp')
countries = gpd.read_file('countries.shp')

cities_with_countries = gpd.sjoin(cities, countries, how="inner", predicate="within")


➡️Преимущества использования GeoPandas:
💬Эффективная обработка больших объемов геоданных
💬Интеграция с экосистемой Python для анализа данных
💬Упрощение сложных геопространственных операций
💬Возможность создания высококачественных картографических визуализаций

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

➡️Создать множество очень просто:

colors = {"red", "blue", "green"}
print(colors) # Вывод: {'blue', 'green', 'red'}

Заметили, что порядок элементов изменился? Это нормально для множеств - они не сохраняют порядок.

➡️Давайте рассмотрим самые полезные методы для работы с множествами.

➡️1. add() - Добавление элемента

Метод add() позволяет добавить новый элемент в множество. Если элемент уже существует, ничего не произойдет.
fruits = {"apple", "banana", "cherry"}
fruits.add("orange")
print(fruits) # Вывод: {'apple', 'banana', 'cherry', 'orange'}
fruits.add("apple") # Ничего не изменится
print(fruits) # Вывод: {'apple', 'banana', 'cherry', 'orange'}


➡️2. remove() и discard() - Удаление элементов

Оба метода удаляют элемент из множества, но есть важное различие:
💬remove() вызовет ошибку, если элемента нет в множестве
💬discard() просто ничего не сделает, если элемента нет
numbers = {1, 2, 3, 4, 5}
numbers.remove(3)
print(numbers) # Вывод: {1, 2, 4, 5}

numbers.discard(10) # Ничего не произойдет
print(numbers) # Вывод: {1, 2, 4, 5}

numbers.remove(10) # Вызовет ошибку KeyError


➡️3. union() - Объединение множеств
Метод union() объединяет два или более множеств. Это как смешать шарики из разных мешков в один большой мешок!

set1 = {1, 2, 3}
set2 = {3, 4, 5}
set3 = set1.union(set2)
print(set3) # Вывод: {1, 2, 3, 4, 5}


➡️4. intersection() - Пересечение множеств

Этот метод находит общие элементы между множествами. Представьте, что вы ищете друзей, которые любят и пиццу, и мороженое!
pizza_lovers = {"Алиса", "Боб", "Чарли", "Дэвид"}
ice_cream_lovers = {"Боб", "Чарли", "Ева", "Фрэнк"}
pizza_and_ice_cream = pizza_lovers.intersection(ice_cream_lovers)
print(pizza_and_ice_cream) # Вывод: {'Боб', 'Чарли'}


➡️5. difference() - Разность множеств

Метод difference() возвращает элементы, которые есть в одном множестве, но отсутствуют в другом.
set1 = {1, 2, 3, 4, 5}
set2 = {4, 5, 6, 7, 8}
diff = set1.difference(set2)
print(diff) # Вывод: {1, 2, 3}


➡️6. symmetric_difference() - Симметричная разность

Этот метод возвращает элементы, которые есть в одном из множеств, но не в обоих сразу. Это как найти уникальные предпочтения в группе друзей!
group1 = {"пицца", "бургер", "суши"}
group2 = {"суши", "рамен", "пицца"}
unique_preferences = group1.symmetric_difference(group2)
print(unique_preferences) # Вывод: {'бургер', 'рамен'}


➡️Заключение
Множества в Python - это невероятно полезный инструмент для работы с уникальными элементами и выполнения различных операций над наборами данных.

🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥93
Forwarded from IT memer
Please open Telegram to view this post
VIEW IN TELEGRAM
🤣166👍2
✈️composio-core - это мощная библиотека для Python, предназначенная для упрощения процесса композиции и декомпозиции сложных объектов. Она предоставляет элегантный и интуитивно понятный API, который позволяет разработчикам легко создавать, модифицировать и анализировать сложные структуры данных.

➡️Установка composio-core

Установить библиотеку composio-core очень просто. Вы можете использовать pip, стандартный менеджер пакетов Python. Вот команда для установки:

pip install composio-core


➡️Основные возможности
💬Гибкая система композиции объектов
💬Мощные инструменты для декомпозиции и анализа
💬Поддержка асинхронных операций
💬Интеграция с популярными фреймворками
💬Расширяемая архитектура плагинов

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

Давайте рассмотрим простой пример использования composio-core для создания и анализа сложного объекта:
from composio_core import Composer, Analyzer

# Создаем композицию
composer = Composer()
complex_object = composer.create({
"name": "Проект X",
"components": [
{"type": "module", "name": "Auth", "version": "1.2.0"},
{"type": "database", "name": "UserDB", "engine": "PostgreSQL"},
{"type": "service", "name": "EmailNotifier", "protocol": "SMTP"}
]
})

# Анализируем созданный объект
analyzer = Analyzer()
analysis_result = analyzer.analyze(complex_object)

print(analysis_result.summary())
print(f"Количество компонентов: {analysis_result.component_count}")
print(f"Типы компонентов: {', '.join(analysis_result.component_types)}")

⬆️В этом примере мы создали сложный объект, представляющий структуру проекта, а затем проанализировали его с помощью инструментов composio-core.

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

💬1. Повышение читаемости кода

Благодаря четкой структуре и интуитивно понятному API, код, использующий composio-core, становится более читаемым и понятным. Это особенно важно при работе в команде или при поддержке долгосрочных проектов.

💬2. Ускорение разработки

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

💬3. Гибкость и расширяемость

Архитектура composio-core позволяет легко расширять функциональность библиотеки с помощью плагинов, что делает ее идеальным выбором для проектов с уникальными требованиями.

➡️Продвинутые возможности

Помимо базовой функциональности, composio-core предлагает ряд продвинутых возможностей:

➡️Асинхронная композиция
import asyncio
from composio_core import AsyncComposer

async def create_complex_object():
composer = AsyncComposer()
object = await composer.create_async({
"name": "Async Project",
"components": [
{"type": "api", "name": "UserAPI", "version": "2.0.0"},
{"type": "queue", "name": "TaskQueue", "technology": "RabbitMQ"}
]
})
return object

complex_object = asyncio.run(create_complex_object())
print(complex_object)


➡️Интеграция с популярными фреймворками

composio-core легко интегрируется с популярными Python-фреймворками, такими как Django и Flask. Например, вот как можно использовать библиотеку в Django-проекте:
from django.views import View
from django.http import JsonResponse
from composio_core import Composer

class ProjectView(View):
def post(self, request):
composer = Composer()
project = composer.create(request.POST)
return JsonResponse({"project": project.to_dict()})


➡️Заключение

Библиотека composio-core представляет собой мощный и гибкий инструмент для работы со сложными структурами данных в Python.

Независимо от того, разрабатываете ли вы веб-приложение, систему анализа данных или инструмент для машинного обучения, composio-core может значительно упростить процесс работы с комплексными объектами и структурами данных.

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


➡️Основные возможности Typer:
💬Декоратор @typer.command() для определения команд и подкоманд.
💬Автоматический парсинг аргументов и опций.
💬Валидация и tipped annotations для аргументов и опций.
💬Автоматическая генерация help с описаниями.
💬Встроенная поддержка Click для обратной совместимости.

➡️Пример:
import typer

app = typer.Typer()

@app.command()
def hello(name: str):
# Приветствие пользователя
print(f"Hello {name}")

@app.command()
def goodbye(name: str, formal: bool = False):
# Прощание с пользователем
if formal:
print(f"Goodbye Ms./Mr. {name}. Have a good day.")
else:
print(f"Bye {name}!")

if __name__ == "__main__":
app()


🔎Typer часто используется для создания утилит командной строки, CLI интерфейсов для python приложений, API клиентов, DevOps инструментов и других задач, где нужен простой и удобный интерфейс командной строки.

🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍3🔥2
👍53
Что выдаст код выше
Anonymous Quiz
14%
1234
7%
12.0
26%
1234.0
53%
Error
😐11👍73🤨2
🐍Разбор

С 3.6 версии допускаются разделители в виде _ для повышения читаемости чисел. Функция float ожидает строку и игнорирует _. На более старших версиях будет ошибка
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥43
✈️В Python целые числа имеют "бесконечную" точность. Это означает, что вы можете работать с целыми числами любого размера, не беспокоясь о переполнении.

➡️Например, давайте возьмем число 2 и возведем его в степень 1000:
print(2**1000)


➡️Результат:
10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376


⬆️Это число содержит 302 цифры!

➡️В других языках программирования, таких как C или Java, вы бы столкнулись с ограничениями при работе с такими большими числами. Но в Python вы можете спокойно работать с числами практически любого размера.

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

Однако важно помнить, что хотя Python может обрабатывать такие большие числа, это может повлиять на производительность при выполнении операций с ними. Поэтому, если вам не нужна такая высокая точность, лучше использовать стандартные типы данных.

В целом, эта особенность Python делает его очень мощным инструментом для работы с целыми числами любого размера.

🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14👍75
Forwarded from IT memer
Please open Telegram to view this post
VIEW IN TELEGRAM
8🤣7👍3👏1
✈️googlesearchэто простая в использовании библиотека для Python, которая позволяет отправлять запросы в Google и получать ссылки на результаты поиска прямо из вашего кода. Она предоставляет гибкий и мощный интерфейс, который можно настроить для различных задач поиска.

➡️Основной функционал

Основной метод библиотеки — это функция search(), которая возвращает результаты поиска в виде генератора, содержащего объекты SearchResult или URL-ссылки в зависимости от параметров.

Аргументы функции:
💬term — строка с запросом, которую вы хотите найти в Google.
💬num_results — количество результатов, которые нужно вернуть (по умолчанию 10).
💬lang — язык результатов поиска (по умолчанию "en").
💬proxy — возможность использования прокси для запросов (по умолчанию None).
💬advanced — расширенный режим поиска, возвращает объекты с более детализированной информацией, такими как заголовок и описание страницы (по умолчанию False).
💬sleep_interval — время ожидания между запросами в секундах (по умолчанию 0).
💬timeout — максимальное время ожидания ответа от Google (по умолчанию 5 секунд).
💬safe — настройка безопасного поиска: "off" для отключения, "active" для фильтрации контента для взрослых (по умолчанию "active").
💬ssl_verify — возможность включить или отключить проверку SSL-сертификатов (по умолчанию None).
💬region — регион для таргетирования поиска (по умолчанию None).

➡️Примеры использования

💬Простой поиск:
from googlesearch import search

query = "Python best practices"
for result in search(query, num_results=5):
print(result)

⬆️Этот код отправляет запрос "Python best practices" и возвращает первые пять ссылок на результаты поиска.

💬Расширенный поиск с дополнительными параметрами:
for result in search("новости технологий", num_results=3, lang='ru', safe='off', region='RU', advanced=True):
print(result.title, result.url)

⬆️Поиск по русскоязычным ресурсам с отключенным безопасным поиском и указанием региона RU. В данном случае возвращаются не только ссылки, но и заголовки страниц.

🔎В общем, googlesearch - это мощный инструмент, который позволяет интегрировать Google-поиск в Python-приложения, делая его отличным для автоматизации и поиска данных.

🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
7👍4🔥3
➡️Настройка четверга среды

Шаг 1: Настройка проекта

💬Установите Python с официального сайта
💬Создайте файлы: app.py templates/index.html`

Шаг 2: Установка библиотек
pip install qrcode Flask


➡️Реализация

Шаг 3: Написание кода

Откройте файл app.py и добавьте следующий код:
import qrcode
from flask import Flask, request, render_template, send_file

app = Flask(__name__)

@app.route("/", methods=["GET", "POST"])
def generate_qr():
if request.method == "POST":
data = request.form["data"]
qr_img = qrcode.make(data)

qr_path = "static/qr_code.png"
qr_img.save(qr_path)

return send_file(qr_path, mimetype='image/png')

return render_template("index.html")

if __name__ == "__main__":
app.run(debug=True)


💬Теперь откройте файл templates/index.html и добавьте следующий HTML-код:
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>QR-код генератор</title>
</head>
<body>
<h1>QR-код генератор</h1>
<form method="POST">
<input type="text" name="data" placeholder="Введите текст или URL">
<button type="submit">Сгенерировать QR-код</button>
</form>
{% if qr_code %}
<img src="{{ qr_code }}" alt="QR-код">
{% endif %}
</body>
</html>


➡️Тестирование приложения

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


Откройте браузер и перейдите по адресу http://127.0.0.1:5000. Вы увидите форму для ввода текста или URL. После ввода данных и нажатия кнопки "Сгенерировать QR-код", вы получите изображение с QR-кодом.

🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍123🔥2