Python Декораторы: Уроки с нуля #20

Создание простой функции для открытия веб-сайта

Для начала создадим функцию, открывающую URL-адрес в браузере по умолчанию. Используем модуль webbrowser.

import webbrowser

def open_url(url):
    webbrowser.open(url)

open_url("https://ait-pager.com")

Этот код откроет указанный сайт в вашем браузере.

Реализация декораторов

Декораторы позволяют выполнять код до и после вызова функции. Создадим простой декоратор, выводящий информацию до и после выполнения функции.

def validator(func):
    def wrapper(url):
        print("Текст до функции")
        func(url)
        print("Текст после функции")
    return wrapper

@validator
def open_url(url):
    webbrowser.open(url)

open_url("https://ait-pager.com")

validator — декоратор. Вложенная функция wrapper выполняет действия до и после вызова open_url. @validator применяет декоратор к open_url.

Добавление проверки корректности URL

Добавим в декоратор проверку корректности URL-адреса:

def validator(func):
    def wrapper(url):
        if "." in url:
            print("Текст до функции")
            func(url)
            print("Текст после функции")
        else:
            print("Неверный URL")
    return wrapper

@validator
def open_url(url):
    webbrowser.open(url)

open_url("https://ait-pager.com")  # Верный URL
open_url("ait-pager") # Неверный URL

Декоратор проверяет наличие точки в URL. При её наличии (что обычно указывает на корректность) функция выполняется, и выводятся сообщения. В противном случае выводится сообщение об ошибке.

Преимущества и применение декораторов

Декораторы позволяют расширять функциональность функций без изменения их кода. Например, добавление проверки к 200 функциям требует лишь применения одного декоратора. Удаление декоратора отключает дополнительную функциональность. Можно создавать множество декораторов, каждый для своей задачи. В веб-фреймворках, таких как Django, или библиотеках для Android (например, Kivy) декораторы применяются не так часто, но понимание их работы полезно.

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

Что будем искать? Например,программа