Освойте Python на курсе от Skypro. Вас ждут 400 часов обучения и практики (достаточно десяти часов в неделю), подготовка проектов для портфолио, индивидуальная проверка домашних заданий и помощь опытных наставников. Получится, даже если у вас нет опыта в IT.
В Python декораторы — это способ изменения поведения функции или класса, они оборачивают функцию или класс, чтобы добавить новые функциональности. Например, с помощью декоратора можно добавить поведение для логирования в функцию, не изменяя саму функцию.
Пример декоратора:
def log_decorator(func):
def wrapper():
print(f'Вызов функции: {func.__name__}')
func()
return wrapper
@log_decorator
def hello_world():
print("Hello, world!")
hello_world()
В этом примере hello_world обернута log_decorator, который печатает имя функции перед ее вызовом. Однако, это ведет к некоторым проблемам. Если вы попробуете получить имя функции hello_world после того, как она была декорирована, вы получите имя функции обертки, а не исходное имя функции.
print(hello_world.__name__) # Вывод: wrapper
Здесь вместо ожидаемого hello_world выводится wrapper. Это происходит потому, что hello_world теперь ссылается на функцию wrapper внутри log_decorator.
Вот здесь на помощь приходит functools.wraps. Это функция в Python, которая используется внутри декоратора перед внутренней обертывающей функцией. Она обновляет обертку для функции, чтобы она включала в себя имя декорируемой функции и ее документацию.
Вот пример использования functools.wraps:
from functools import wraps
def log_decorator(func):
@wraps(func)
def wrapper():
print(f'Вызов функции: {func.__name__}')
func()
return wrapper
@log_decorator
def hello_world():
print("Hello, world!")
print(hello_world.__name__)
# Вывод: hello_world
Теперь, когда мы печатаем hello_world.__name__, мы получаем ожидаемое имя функции, даже если она была декорирована. Это делает functools.wraps очень полезным при работе с декораторами в Python.
Изучайте Python на онлайн-курсе от Skypro «Python-разработчик». Программа рассчитана на новичков без опыта программирования и технического образования. Курс проходит в формате записанных коротких видеолекций. Будет много проверочных заданий и мастер-классов. В конце каждой недели — живая встреча с экспертами в разработке для ответов на вопросы и разбора домашек.
Перейти в телеграм, чтобы получить результаты теста





Забрать
Добавить комментарий