Python Decorators

दोस्तों, क्या आपने कभी सोचा है कि Python में कोड को और भी शक्तिशाली और सुंदर कैसे बनाया जा सकता है? क्या आप बिना किसी फंक्शन के मूल कोड को बदले उसकी कार्यक्षमता को बढ़ाना चाहते हैं? अगर हाँ, तो Python डेकोरेटर्स आपके लिए किसी जादू से कम नहीं हैं!

चलिए, आज हम इस ब्लॉग पोस्ट में Python डेकोरेटर्स को बिलकुल सरल भाषा में समझेंगे। हम जानेंगे कि डेकोरेटर्स क्या हैं, वे कैसे काम करते हैं और उनका उपयोग करके हम अपने कोड को कैसे बेहतर बना सकते हैं।

Python डेकोरेटर्स क्या हैं?

सरल शब्दों में, डेकोरेटर्स ऐसे फंक्शन्स होते हैं जो दूसरे फंक्शन्स को इनपुट के रूप में लेते हैं और उनकी कार्यक्षमता को बढ़ाकर एक नया फंक्शन लौटाते हैं।

इसे समझने के लिए, टोल बूथ का उदाहरण लेते हैं। जब आप किसी हाईवे पर चलते हैं, तो आपको टोल बूथ से गुजरना पड़ता है। टोल बूथ आपकी गाड़ी के प्रकार के आधार पर टोल वसूलता है, लेकिन आपकी यात्रा के उद्देश्य या आपके गंतव्य को नहीं बदलता है।

ठीक उसी तरह, डेकोरेटर्स आपके फंक्शन को "डेकोरेट" करते हैं, यानी उसकी कार्यक्षमता में कुछ अतिरिक्त कार्य जोड़ते हैं, लेकिन उसके मूल उद्देश्य को नहीं बदलते हैं।

डेकोरेटर्स का उपयोग क्यों करें?

डेकोरेटर्स का उपयोग करने के कई फायदे हैं:

  • कोड को पुन: प्रयोज्य बनाते हैं: आप एक ही डेकोरेटर का उपयोग कई अलग-अलग फंक्शन्स के साथ कर सकते हैं।
  • कोड को अधिक पठनीय बनाते हैं: डेकोरेटर्स का उपयोग करके, आप अपने कोड को छोटा और समझने में आसान बना सकते हैं।
  • कोड को अधिक संगठित बनाते हैं: डेकोरेटर्स का उपयोग करके, आप समान कार्य करने वाले कोड को एक साथ समूहित कर सकते हैं।

Python में डेकोरेटर्स कैसे काम करते हैं?

डेकोरेटर्स फंक्शन्स हैं जो @ सिंबल का उपयोग करके फंक्शन डेफिनेशन से ठीक पहले लिखे जाते हैं।

चलिए, एक सरल उदाहरण देखते हैं:

def my_decorator(func): def wrapper(): print("फंक्शन शुरू होने से पहले कुछ काम।") func() print("फंक्शन खत्म होने के बाद कुछ काम।") return wrapper @my_decorator def say_hello(): print("नमस्ते, दुनिया!") say_hello()

इस उदाहरण में:

  1. my_decorator एक डेकोरेटर फंक्शन है जो func नामक एक फंक्शन को इनपुट के रूप में लेता है।
  2. wrapper फंक्शन my_decorator के अंदर परिभाषित किया गया है और यह func को कॉल करने से पहले और बाद में कुछ काम करता है।
  3. @my_decorator सिंटैक्स का उपयोग say_hello फंक्शन को my_decorator से डेकोरेट करने के लिए किया जाता है।
  4. जब say_hello() को कॉल किया जाता है, तो my_decorator फंक्शन को कॉल किया जाता है, जो wrapper फंक्शन को लौटाता है।
  5. wrapper फंक्शन say_hello को कॉल करता है और उसके पहले और बाद में कुछ काम करता है।

आउटपुट:

फंक्शन शुरू होने से पहले कुछ काम।
नमस्ते, दुनिया!
फंक्शन खत्म होने के बाद कुछ काम।

डेकोरेटर्स के कुछ और उदाहरण

चलिए, अब हम कुछ और व्यावहारिक उदाहरण देखते हैं जो डेकोरेटर्स की शक्ति को दर्शाते हैं:

समय मापने वाला डेकोरेटर

import time def time_it(func): def wrapper(*args, **kwargs): start_time = time.time() result = func(*args, **kwargs) end_time = time.time() print(f"फंक्शन {func.__name__} को पूरा होने में {end_time - start_time:.4f} सेकंड लगे।") return result return wrapper @time_it def long_running_function(n): time.sleep(2) return n * n print(long_running_function(5))

यह डेकोरेटर time.time() फंक्शन का उपयोग करके किसी भी फंक्शन को पूरा होने में लगने वाले समय को मापता है।

लॉगिंग डेकोरेटर

def log_it(func): def wrapper(*args, **kwargs): print(f"फंक्शन {func.__name__} को कॉल किया गया। आर्गुमेंट: {args}, कीवर्ड आर्गुमेंट: {kwargs}") result = func(*args, **kwargs) print(f"फंक्शन {func.__name__} से रिटर्न वैल्यू: {result}") return result return wrapper @log_it def add_numbers(a, b): return a + b print(add_numbers(3, 5))

यह डेकोरेटर किसी भी फंक्शन को कॉल करने और उससे रिटर्न होने वाली वैल्यू को लॉग करता है।

कैशिंग डेकोरेटर

def cache_it(func): cache = {} def wrapper(*args): if args not in cache: cache[args] = func(*args) return cache[args] return wrapper @cache_it def factorial(n): if n == 0: return 1 else: return n * factorial(n - 1) print(factorial(5)) print(factorial(5))

यह डेकोरेटर पहले से गणना की गई वैल्यूज को कैश करता है ताकि उन्हें दोबारा गणना न करनी पड़े।

निष्कर्ष

Python डेकोरेटर्स कोड को पुन: प्रयोज्य, पठनीय और संगठित बनाने के लिए एक शक्तिशाली उपकरण हैं। इनका उपयोग करके, आप बिना किसी फंक्शन के मूल कोड को बदले उसकी कार्यक्षमता को बढ़ा सकते हैं।

मुझे आशा है कि इस ब्लॉग पोस्ट ने आपको Python डेकोरेटर्स को समझने में मदद की होगी। यदि आपके कोई प्रश्न हैं, तो कृपया बेझिझक पूछें!

Would you like to know more? watch a video on Python decorators