es
Feedback
Python | Вопросы собесов

Python | Вопросы собесов

Ir al canal en Telegram

📈 Análisis del canal de Telegram Python | Вопросы собесов

El canal Python | Вопросы собесов (@python_easy_ru) en el segmento lingüístico de Ruso es un actor destacado. Actualmente la comunidad reúne a 13 104 suscriptores, ocupando la posición 9 745 en la categoría Tecnologías y Aplicaciones y el puesto 50 714 en la región Rusia.

📊 Métricas de audiencia y dinámica

Desde su creación el невідомо, el proyecto ha mostrado un crecimiento acelerado, reuniendo a 13 104 suscriptores.

Según los últimos datos del 09 junio, 2026, el canal mantiene una actividad estable. En los últimos 30 días la variación de miembros fue de -53, y en las últimas 24 horas de -3, conservando un alto alcance.

  • Estado de verificación: No verificado
  • Tasa de interacción (ER): El promedio de interacción de la audiencia es 8.62%. Durante las primeras 24 horas tras publicar, el contenido suele obtener 5.62% de reacciones respecto al total de suscriptores.
  • Alcance de las publicaciones: Cada publicación recibe en promedio 1 129 visualizaciones. En el primer día suele acumular 737 visualizaciones.
  • Reacciones e interacción: La audiencia responde de forma activa: el promedio de reacciones por publicación es 4.
  • Intereses temáticos: El contenido se centra en temas clave como ставь, модуль, строка, docker, alice.

📝 Descripción y política de contenido

El autor describe el recurso como un espacio para expresar opiniones subjetivas:
Cайт: easyoffer.ru Реклама: @easyoffer_adv ВП: @easyoffer_vp Тесты t.me/+20tRfhrwPpM4NDQy Задачи t.me/+nsl4meWmhfQwNDVi Вакансии t.me/+cXGKkrOY2-w3ZTky

Gracias a la alta frecuencia de actualizaciones (últimos datos recibidos el 10 junio, 2026), el canal mantiene la vigencia y un amplio alcance. La analítica demuestra que la audiencia interactúa activamente con el contenido, lo que lo convierte en un punto de referencia dentro de la categoría Tecnologías y Aplicaciones.

13 104
Suscriptores
-324 horas
-137 días
-5330 días
Archivo de publicaciones
🤔 Расскажи о методах add , mul , sub , truediv? Методы add, mul, sub и truediv являются специальными методами (или "магическими методами"), которые позволяют объектам пользовательских классов взаимодействовать с операциями сложения, умножения, вычитания и деления соответственно. Эти методы обеспечивают удобную и интуитивно понятную интеграцию пользовательских классов с арифметическими операциями Python. 🟠Метод add Используется для реализации оператора сложения (+). Он вызывается, когда используется оператор + между двумя объектами.
class Vector:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __add__(self, other):
        return Vector(self.x + other.x, self.y + other.y)

    def __repr__(self):
        return f"Vector({self.x}, {self.y})"

# Использование
v1 = Vector(1, 2)
v2 = Vector(3, 4)
v3 = v1 + v2
print(v3)  # Вывод: Vector(4, 6)
🟠Метод mul Используется для реализации оператора умножения (*). Он вызывается, когда используется оператор * между двумя объектами.
class Vector:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __mul__(self, scalar):
        return Vector(self.x * scalar, self.y * scalar)

    def __repr__(self):
        return f"Vector({self.x}, {self.y})"

# Использование
v = Vector(1, 2)
v2 = v * 3
print(v2)  # Вывод: Vector(3, 6)
🟠Метод sub Используется для реализации оператора вычитания (-). Он вызывается, когда используется оператор - между двумя объектами.
class Vector:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __sub__(self, other):
        return Vector(self.x - other.x, self.y - other.y)

    def __repr__(self):
        return f"Vector({self.x}, {self.y})"

# Использование
v1 = Vector(5, 7)
v2 = Vector(2, 3)
v3 = v1 - v2
print(v3)  # Вывод: Vector(3, 4)
🟠Метод truediv Используется для реализации оператора деления (/). Он вызывается, когда используется оператор / между двумя объектами.
class Vector:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __truediv__(self, scalar):
        return Vector(self.x / scalar, self.y / scalar)

    def __repr__(self):
        return f"Vector({self.x}, {self.y})"

# Использование
v = Vector(6, 8)
v2 = v / 2
print(v2)  # Вывод: Vector(3.0, 4.0)
Ставь 👍 и забирай 📚 Базу знаний

🧠 Machine Learning — авторский канал, где собрана вся база по ИИ и машинному обучению. Senior разработчик AI-алгоритмов и ав
+5
🧠 Machine Learning — авторский канал, где собрана вся база по ИИ и машинному обучению. Senior разработчик AI-алгоритмов и автономных агентов, разбирает гайды, редкую литературу и код топовых моделей машинного обучения и искусственного интеллекта. В 2025 году ИИ выйдет на совершенно новый уровень тот, кто не успеет за прогрессом - отстанет, а кто разберется - сорвет куш. Стоит подписаться: t.me/ai_machinelearning_big_data

🤔 Для чего подходят асинхронные операции? 1. Асинхронные операции подходят для задач с высокой задержкой: сетевые запросы, доступ к базам данных, ввод/вывод файлов. 2. Они повышают производительность за счёт параллельного выполнения задач, не блокируя основной поток. 3. Особенно полезны для приложений с большим числом одновременно обслуживаемых клиентов (например, веб-серверы). Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Расскажи о методах len и abs ? Методы __len__ и abs являются специальными методами (или "магическими методами"), которые позволяют объектам классов взаимодействовать с встроенными функциями и операциями языка. Эти методы обеспечивают удобную и интуитивно понятную интеграцию пользовательских классов с стандартными операциями Python. 🚩Метод len Используется для определения длины объекта. Он должен возвращать количество элементов в объекте. Позволяет объектам взаимодействовать с встроенной функцией len().
class MyCollection:
    def __init__(self, items):
        self.items = items

    def __len__(self):
        return len(self.items)

# Использование
my_collection = MyCollection([1, 2, 3, 4, 5])
print(len(my_collection))  # Вывод: 5
🚩Метод abs Используется для вычисления абсолютного значения объекта. Он должен возвращать абсолютное значение объекта. Позволяет объектам взаимодействовать с встроенной функцией abs().
class MyNumber:
    def __init__(self, value):
        self.value = value

    def __abs__(self):
        return abs(self.value)

# Использование
my_number = MyNumber(-10)
print(abs(my_number))  # Вывод: 10
🚩ПреимуществаИнтеграция с встроенными функциями Методы len и abs позволяют пользовательским объектам взаимодействовать с встроенными функциями Python, что делает их использование более интуитивно понятным и удобным. ➕Полиморфизм Эти методы позволяют использовать объекты классов с функциями и операциями, предназначенными для стандартных типов данных. ➕Читаемость кода Использование стандартных функций len() и abs() для пользовательских объектов делает код более понятным и читабельным.
import math

class Vector:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __len__(self):
        return 2  # Вектор на плоскости всегда имеет два компонента

    def __abs__(self):
        return math.sqrt(self.x**2 + self.y**2)  # Длина (модуль) вектора

    def __repr__(self):
        return f"Vector({self.x}, {self.y})"

# Использование
v = Vector(3, 4)
print(len(v))  # Вывод: 2
print(abs(v))  # Вывод: 5.0
Ставь 👍 и забирай 📚 Базу знаний

🤔 В чём суть проекта Celery? Предоставляет систему для распределённого выполнения фоновых задач. 1. Работает с брокерами сообщений (Redis, RabbitMQ) для передачи задач. 2. Позволяет распределять обработку задач между несколькими рабочими процессами (workers). 3. Используется для автоматизации долгих или повторяющихся операций. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что такое деструктор класса ? Это специальный метод, который вызывается автоматически при уничтожении объекта класса. Используются для выполнения завершающих действий, таких как освобождение ресурсов, закрытие файлов, освобождение памяти и выполнение других операций очистки перед тем, как объект будет окончательно удалён из памяти. 🚩Деструкторы Определяется с помощью метода __del__. Этот метод вызывается, когда объект становится недоступным для использования и должен быть удалён сборщиком мусора.
class Person:
    def __init__(self, name):
        self.name = name
        print(f"{self.name} is created")

    def __del__(self):
        print(f"{self.name} is deleted")

# Создание экземпляра класса Person
person1 = Person("Alice")

# Удаление ссылки на объект
del person1

# Пример с автоматическим вызовом деструктора при завершении программы
person2 = Person("Bob")
🚩Основные функции 🟠Освобождение ресурсов Используется для освобождения ресурсов, таких как память, файловые дескрипторы, сетевые соединения и другие. 🟠Выполнение завершающих действий Может выполнять любые завершающие действия, которые необходимо выполнить перед удалением объекта. 🟠Поддержание корректности программы Помогает избежать утечек памяти и других ресурсов, обеспечивая корректное завершение работы программы. 🚩Особенности 🟠Неопределённое время вызова Сборщик мусора управляет временем жизни объектов, поэтому точное время вызова деструктора не всегда определено. 🟠Не вызывается для циклических ссылок Деструкторы не вызываются для объектов, участвующих в циклических ссылках. Для таких случаев рекомендуется использовать модуль weakref.
import weakref

class Node:
    def __init__(self, name):
        self.name = name
        self.next = None
        print(f"{self.name} is created")

    def __del__(self):
        print(f"{self.name} is deleted")

# Создание узлов
node1 = Node("Node1")
node2 = Node("Node2")

# Создание циклической ссылки
node1.next = node2
node2.next = node1

# Удаление узлов (циклическая ссылка предотвратит вызов деструкторов)
del node1
del node2

# Использование слабых ссылок для предотвращения утечек памяти
node1 = Node("Node1")
node2 = Node("Node2")
node1.next = weakref.ref(node2)
node2.next = weakref.ref(node1)

# Удаление узлов (слабые ссылки позволят вызвать деструкторы)
del node1
del node2
Ставь 👍 и забирай 📚 Базу знаний

🤔 Для чего можно использовать Celery? 1. Это инструмент для выполнения задач в фоновом режиме. 2. Используется для отправки уведомлений, обработки данных, построения отчётов и выполнения длительных операций вне основного потока. 3. Поддерживает планирование задач и распределённую обработку через брокеры, такие как RabbitMQ или Redis. Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое конструктор класса ? Это специальный метод, который вызывается при создании нового экземпляра класса. В языках ООП конструкторы используются для инициализации объектов, устанавливая начальные значения атрибутов и выполняя любые необходимые действия при создании экземпляра. 🚩Конструктор Называется __init__. Этот метод вызывается автоматически при создании нового объекта класса и используется для инициализации атрибутов объекта.
class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def display(self):
        print(f"Name: {self.name}, Age: {self.age}")

# Создание экземпляра класса Person
person1 = Person("Alice", 30)
person1.display()  # Вывод: Name: Alice, Age: 30

person2 = Person("Bob", 25)
person2.display()  # Вывод: Name: Bob, Age: 25
🚩Основные функции 🟠Инициализация атрибутов Инициализирует атрибуты объекта начальными значениями. 🟠Выполнение необходимой логики Может выполнять любые действия, необходимые при создании объекта (например, проверка входных данных). 🟠Управление ресурсами Может выполнять действия по управлению ресурсами, такие как открытие файлов или подключение к базе данных. 🚩Перегрузка Перегрузка конструктора не поддерживается напрямую, но можно использовать аргументы по умолчанию или конструкцию args и kwargs для имитации перегрузки.
#include <iostream>
using namespace std;

class Person {
public:
    string name;
    int age;

    // Конструктор по умолчанию
    Person() {
        name = "Unknown";
        age = 0;
    }

    // Конструктор с параметрами
    Person(string n, int a) {
        name = n;
        age = a;
    }

    void display() {
        cout << "Name: " << name << ", Age: " << age << endl;
    }
};

int main() {
    Person person1;
    person1.display();  // Вывод: Name: Unknown, Age: 0

    Person person2("Alice", 30);
    person2.display();  // Вывод: Name: Alice, Age: 30

    return 0;
}
Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое async? Это ключевое слово, используемое для создания асинхронных функций, которые работают в неблокирующем режиме. 1. Асинхронные операции позволяют выполнять другие задачи, пока ожидается завершение медленных операций, таких как запросы к сети или доступ к файлам. 2. Async используется с await для управления асинхронным кодом. Ставь 👍 и забирай 📚 Базу знаний

🤔 Когда нельзя линеаризовать ? Это процесс определения порядка разрешения методов (Method Resolution Order, MRO), который используется для поиска методов и атрибутов в иерархии классов при множественном наследовании. 🚩Когда нельзя линеаризовать иерархию классов 🟠Несоответствие принципам C3-линеаризации Python использует алгоритм C3-линеаризации для определения MRO. Если иерархия классов не соответствует принципам C3-линеаризации, то линеаризация невозможна. 🟠Конфликтные зависимости Конфликты возникают, когда два или более родительских класса содержат методы или атрибуты с одинаковыми именами, и порядок их разрешения не может быть однозначно определён. 🟠Несовместимые суперклассы Если классы в иерархии имеют несовместимые или пересекающиеся зависимости, это может сделать линеаризацию невозможной.
class A:
    pass

class B(A):
    pass

class C(A):
    pass

class D(B, C):
    pass
🚩Как определяется Python использует C3-линеаризацию для определения порядка разрешения методов. Этот алгоритм соблюдает порядок наследования классов, учитывая при этом принципы монотонности и консистентности.
class A:
    def method(self):
        print("A")

class B(A):
    def method(self):
        print("B")

class C(A):
    def method(self):
        print("C")

class D(B, C):
    pass

d = D()
d.method()  # Вывод: B
Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое HTTP и HTTPS? 1. HTTP (HyperText Transfer Protocol): протокол передачи данных между клиентом и сервером, передаёт данные в открытом виде. 2. HTTPS: расширение HTTP, использующее шифрование через SSL/TLS для защиты передаваемых данных. 3. HTTPS обеспечивает конфиденциальность, целостность данных и аутентификацию сервера. Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое проблема наследования ? Наследование является мощным механизмом в ООП, но оно также может привести к ряду проблем, которые следует учитывать при проектировании и разработке программного обеспечения. Вот основные проблемы, связанные с наследованием: 🚩Основные проблемы 🟠Жёсткая связь (Tight Coupling) Классы-наследники зависят от родительских классов. Изменения в родительских классах могут потребовать изменений в классах-наследниках. Если метод в родительском классе изменяет свою сигнатуру или поведение, все классы-наследники должны быть проверены и, возможно, изменены. Решение: Использование композиции вместо наследования, когда это возможно. 🟠Проблема повторного использования (Fragile Base Class Problem) Изменения в базовом классе могут непредсказуемо повлиять на поведение классов-наследников. Добавление нового метода в базовый класс может конфликтовать с существующим методом в классе-наследнике. Решение: Ограничение изменений в базовом классе, тщательное проектирование и тестирование. 🟠Проблемы с множественным наследованием Может привести к конфликтам имен методов и атрибутов, а также к сложности разрешения порядка вызовов методов (MRO — Method Resolution Order). Если два родительских класса имеют методы с одинаковыми именами, класс-наследник может неясно указывать, какой метод использовать. Решение: Использование интерфейсов (в языках, поддерживающих интерфейсы) или композиций. В Python использовать миксины. 🟠Избыточность интерфейсов Классы-наследники наследуют все методы и атрибуты родительских классов, даже если они не нужны. Класс-наследник может быть перегружен ненужными методами и свойствами, которые ему не требуются. Решение: Использование композиции для включения только нужных функциональностей. 🟠Нарушение инкапсуляции Классы-наследники могут получить доступ к защищённым (protected) и приватным (private) членам родительского класса, что может нарушить инкапсуляцию. Класс-наследник может изменить состояние родительского класса, вызывая неожиданные побочные эффекты. Решение: Строгое следование принципам инкапсуляции, использование методов доступа (геттеров и сеттеров).
class A:
    def method(self):
        print("Method from class A")

class B:
    def method(self):
        print("Method from class B")

class C(A, B):
    pass

c = C()
c.method()  # Вывод: Method from class A (MRO выбрал метод из класса A)
🚩Решение проблем наследования 🟠Композиция вместо наследования Предлагает включение объектов других классов в качестве членов, предоставляя больше гибкости и меньшую связанность по сравнению с наследованием.
      class Engine:
       def start(self):
           print("Engine started")

   class Car:
       def __init__(self):
           self.engine = Engine()

       def start(self):
           self.engine.start()
           print("Car started")

   car = Car()
   car.start()
   
🟠Использование интерфейсов и абстрактных классов Могут помочь определить строгие контракты для классов-наследников без предоставления реализации. 🟠Миксины Это классы, которые предназначены для предоставления дополнительной функциональности через множественное наследование, но они не предназначены для инстанцирования напрямую. Ставь 👍 и забирай 📚 Базу знаний

🤔 Чем хорош FastAPI? 1. Высокая производительность: использует Starlette и Pydantic, обеспечивая быстрый отклик. 2. Асинхронность: поддерживает async/await для обработки множества запросов одновременно. 3. Автогенерация документации: автоматически создаёт OpenAPI-спецификации и Swagger UI. 4. Удобство валидации: встроенная поддержка проверки данных. Ставь 👍 и забирай 📚 Базу знаний

🤔 Расскажи о методах enter и exit ? Методы __enter__ и exit являются частью протокола менеджера контекста. Они позволяют объектам определять поведение в контексте оператора with. Эти методы обеспечивают безопасное и автоматическое управление ресурсами, такими как файлы, сетевые соединения и другие объекты, которые требуют явного открытия и закрытия. 🚩Протокол менеджера контекста 🟠__enter__(self) Выполняется в начале блока with и возвращает объект, который будет присвоен переменной, указанной после as. 🟠__exit__(self, exc_type, exc_value, traceback) Выполняется в конце блока with, независимо от того, произошло исключение или нет. Он используется для очистки и освобождения ресурсов.
class ManagedResource:
    def __enter__(self):
        print("Entering the context")
        return self

    def __exit__(self, exc_type, exc_value, traceback):
        print("Exiting the context")
        if exc_type:
            print(f"Exception type: {exc_type}")
            print(f"Exception value: {exc_value}")
            print(f"Traceback: {traceback}")
        return True  # True указывает на то, что исключение было обработано

# Использование
with ManagedResource() as resource:
    print("Inside the context")

print("Outside the context")
Пример управления файлом с использованием менеджера контекста
class FileManager:
    def __init__(self, filename, mode):
        self.filename = filename
        self.mode = mode

    def __enter__(self):
        self.file = open(self.filename, self.mode)
        return self.file

    def __exit__(self, exc_type, exc_value, traceback):
        self.file.close()
        if exc_type:
            print(f"Exception type: {exc_type}")
            print(f"Exception value: {exc_value}")
            print(f"Traceback: {traceback}")
        return True

# Использование
with FileManager("example.txt", "w") as f:
    f.write("Hello, World!")

print("File operation completed")
Ставь 👍 и забирай 📚 Базу знаний

🤔 Как работает хеш-таблица? Хеш-таблица хранит данные в формате ключ-значение, используя хеш-функцию для быстрого доступа. 1. Хеш-функция преобразует ключ в индекс массива. 2. Если возникают коллизии (два ключа дают одинаковый хеш), используются методы разрешения коллизий, например, цепочки (chaining) или открытая адресация. 3. В среднем сложность доступа — O(1), но может быть хуже при большом количестве коллизий. Ставь 👍 и забирай 📚 Базу знаний

🤔 Расскажи о методах getitem и setitem и delitem? Методы getitem, setitem и delitem являются специальными методами, которые позволяют пользовательским объектам взаимодействовать с операциями получения, установки и удаления элементов по индексу или ключу. Эти методы обеспечивают интеграцию пользовательских классов с операциями индексирования, делая их поведение аналогичным встроенным типам данных, таким как списки и словари. 🚩Метод getitem Используется для получения значения элемента по индексу или ключу. Он вызывается, когда используется оператор индексирования (obj[key]).
class CustomList:
    def __init__(self, items):
        self.items = items

    def __getitem__(self, index):
        return self.items[index]

# Использование
my_list = CustomList([1, 2, 3, 4, 5])
print(my_list[2])  # Вывод: 3
🚩Метод titem и delit Используется для установки значения элемента по индексу или ключу. Он вызывается, когда используется оператор присваивания с индексированием (obj[key] = value).
class CustomList:
    def __init__(self, items):
        self.items = items

    def __setitem__(self, index, value):
        self.items[index] = value

# Использование
my_list = CustomList([1, 2, 3, 4, 5])
my_list[2] = 10
print(my_list.items)  # Вывод: [1, 2, 10, 4, 5]
🚩Метод delitem Используется для удаления элемента по индексу или ключу. Он вызывается, когда используется оператор удаления с индексированием (del obj[key]).
class CustomList:
    def __init__(self, items):
        self.items = items

    def __delitem__(self, index):
        del self.items[index]

# Использование
my_list = CustomList([1, 2, 3, 4, 5])
del my_list[2]
print(my_list.items)  # Вывод: [1, 2, 4, 5]
Полный пример пользовательского класса
class CustomDict:
    def __init__(self):
        self.items = {}

    def __getitem__(self, key):
        return self.items[key]

    def __setitem__(self, key, value):
        self.items[key] = value

    def __delitem__(self, key):
        del self.items[key]

    def __repr__(self):
        return f"{self.items}"

# Использование
my_dict = CustomDict()
my_dict['a'] = 1
my_dict['b'] = 2
print(my_dict['a'])  # Вывод: 1
print(my_dict)       # Вывод: {'a': 1, 'b': 2}
del my_dict['a']
print(my_dict)       # Вывод: {'b': 2}
Ставь 👍 и забирай 📚 Базу знаний

🤔 Какие инструменты для виртуального окружения используются? 1. venv: встроенный инструмент Python для создания изолированных окружений. 2. virtualenv: популярное расширение с дополнительными функциями для управления виртуальными окружениями. 3. conda: используется в научных вычислениях и анализе данных, управляет не только Python, но и библиотеками C/C++. 4. Poetry: создаёт и управляет зависимостями через автоматическое создание виртуальных окружений. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что такое JWT? Это компактный, URL-безопасный способ представления заявок между двумя сторонами. JWT широко используется для аутентификации и авторизации в веб-приложениях. 🚩Основные характеристики 🟠Компактность JWT — это компактный формат, который легко передавать через URL, заголовки HTTP или внутри тела запроса. 🟠Самодостаточность JWT содержит всю необходимую информацию для проверки подлинности, что избавляет от необходимости обращаться к базе данных при каждом запросе. 🟠Безопасность JWT может быть подписан с использованием алгоритмов HMAC или RSA, что обеспечивает целостность и подлинность данных. 🚩Структура 🟠Header (Заголовок) Заголовок обычно содержит два поля Тип токена (typ), который для JWT равен "JWT". Алгоритм подписи (alg), например, HMAC SHA256 или RSA.
{
  "alg": "HS256",
  "typ": "JWT"
}
🟠Payload (Полезная нагрузка) Полезная нагрузка содержит набор заявок (claims). Заявки бывают трех типов: Registered claims (Зарегистрированные заявки): Зарезервированные ключи, такие как iss (issuer), exp (expiration time), sub (subject), и aud (audience). Public claims (Публичные заявки): Пользовательские ключи, определенные в спецификации IANA JSON Web Token Registry или согласованные между сторонами. Private claims (Частные заявки): Пользовательские ключи, уникальные для конкретного приложения.
{
  "sub": "1234567890",
  "name": "John Doe",
  "admin": true
}
🟠Signature (Подпись) Подпись создается путем кодирования заголовка и полезной нагрузки с использованием Base64URL и их объединения. Затем применяется алгоритм, указанный в заголовке, к объединенной строке с использованием секретного ключа.
HMACSHA256(
  base64UrlEncode(header) + "." + base64UrlEncode(payload),
  secret
)
🚩Пример использования 1⃣Установка библиотеки
pip install pyjwt
2⃣Создание JWT
import jwt
import datetime

# Секретный ключ
secret_key = "your-256-bit-secret"

# Заголовок
header = {
    "alg": "HS256",
    "typ": "JWT"
}

# Полезная нагрузка
payload = {
    "sub": "1234567890",
    "name": "John Doe",
    "admin": True,
    "exp": datetime.datetime.utcnow() + datetime.timedelta(seconds=30)  # Время истечения действия токена
}

# Создание JWT
token = jwt.encode(payload, secret_key, algorithm="HS256", headers=header)
print(token)
3⃣Декодирование JWT
import jwt

# Секретный ключ
secret_key = "your-256-bit-secret"

# Декодирование JWT
try:
    decoded_payload = jwt.decode(token, secret_key, algorithms=["HS256"])
    print(decoded_payload)
except jwt.ExpiredSignatureError:
    print("Signature has expired")
except jwt.InvalidTokenError:
    print("Invalid token")
Ставь 👍 и забирай 📚 Базу знаний

– Помощь с pet-проектом – Составление roadmap – Общая консультация – Проведение код-ревью и mock-собеседования – Помощь с тру
– Помощь с pet-проектом – Составление roadmap – Общая консультация – Проведение код-ревью и mock-собеседования – Помощь с трудоустройством Все это и многое другое может Ментор. Он обеспечит вам необходимый boost, ускорит и упростит вход в IT. 🔥 Здесь размещен список менторов, и многие из них предлагают бесплатную первую консультацию