Создание простой функции для открытия веб-сайта
Для начала создадим функцию, открывающую 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.