چهل و چهارم
دکوریتورها(decorator)
در پایتون، Decorator (زینتدهنده) یک الگو است که به شما این امکان را میدهد تا رفتار یک تابع یا کلاس را بدون تغییر در کد آنها، تغییر دهید یا گسترش دهید. به عبارت دیگر، دکوراتورها ابزاری برای افزودن ویژگیهای جدید به توابع یا کلاسها هستند. دکوراتورها به عنوان یک تابع دیگر عمل میکنند که یک تابع دیگر را به عنوان ورودی میپذیرد و معمولاً یک تابع جدید را برمیگرداند.
نحوه استفاده:
دکوراتورها با استفاده از علامت @ قبل از تعریف یک تابع یا متد اعمال میشوند.
مثال 1: مثالی ساده
در این مثال، دکوراتور my_decorator قبل و بعد از اجرای تابع say_hello کدی را اجرا میکند.
def my_decorator(func):
def wrapper():
print("قبل از اجرای تابع")
func()
print("بعد از اجرای تابع")
return wrapper
@my_decorator
def say_hello():
print("سلام!")
say_hello()
مثال 2: یک مثال از دکوراتور در پایتون آورده شده است که زمان اجرای یک تابع را اندازهگیری میکند:
تعریف دکوراتور : time_decorator یک دکوراتور است که زمان اجرای تابع را اندازهگیری میکند.
تابع اصلی : slow_function یک تابع است که به طور عمدی ۲ ثانیه خواب میماند.
استفاده از دکوراتور : با استفاده از time_decorator @ ، دکوراتور به تابع slow_function اضافه میشود.
فراخوانی تابع : وقتی تابع slow_function فراخوانی میشود، زمان اجرای آن اندازهگیری و چاپ میشود.
با اجرای این کد، شما میتوانید زمان اجرای تابع را مشاهده کنید.
import time
# تعریف دکوراتور
def time_decorator(func):
def wrapper(*args, **kwargs):
start_time = time.time() # زمان شروع
result = func(*args, **kwargs) # اجرای تابع اصلی
end_time = time.time() # زمان پایان
print(f"زمان اجرای تابع: {end_time - start_time:.4f} ثانیه")
return result
return wrapper
# استفاده از دکوراتور
@time_decorator
def slow_function():
time.sleep(2) # شبیهسازی یک عملیات زمانبر
# فراخوانی تابع
slow_function()
دکوراتورها در پایتون کاربردهای متعددی دارند که به بهبود ساختار و کارایی کد کمک میکنند. برخی از کاربردهای اصلی دکوراتورها عبارتند از:
- مدیریت زمان اجرا : با استفاده از دکوراتورها، میتوان زمان اجرای توابع را اندازهگیری کرد و بهینهسازیهای لازم را انجام داد.
- کنترل دسترسی : دکوراتورها میتوانند برای بررسی مجوزهای دسترسی به توابع استفاده شوند، بهویژه در برنامههای وب.
- کاهش تکرار کد : با استفاده از دکوراتورها، میتوان کدهای تکراری را کاهش داد و نگهداری کد را آسانتر کرد.
- پیادهسازی الگوهای طراحی : دکوراتورها میتوانند به پیادهسازی الگوهای طراحی مختلف مانند Singleton و Factory کمک کنند.
- مدیریت منابع : دکوراتورها میتوانند برای مدیریت منابع مانند اتصال به پایگاه داده یا فایلها استفاده شوند.
- تابع بالاتر (Higher-order function) : دکوراتورها توابعی هستند که یک تابع دیگر را به عنوان ورودی میپذیرند و معمولاً یک تابع جدید را برمیگردانند.
- افزودن ویژگیهای جدید : دکوراتورها میتوانند ویژگیهای جدیدی مانند لاگکردن، اعتبارسنجی ورودیها، و مدیریت خطاها را به توابع اضافه کنند.
به طور کلی، دکوراتورها ابزاری قدرتمند برای افزایش قابلیت انعطافپذیری و کارایی در برنامهنویسی پایتون هستند.