इस ट्यूटोरियल से, आप पायथन डेकोरेटर के बारे में सीखेंगे। आप देखेंगे कि सज्जाकार क्या हैं, उदाहरणों की सहायता से उन्हें कैसे बनाया और उपयोग किया जाता है।
ध्यान दें: यहां इस्तेमाल किया गया सिंटैक्स पायथन 3 के लिए है। आप इसे पायथन के अन्य संस्करणों के साथ उपयोग करने के लिए संशोधित कर सकते हैं।
पायथन डेकोरेटर क्या है?
डेकोरेटर पायथन में एक कॉल करने योग्य इकाई है जो हमें कार्यों या कक्षाओं में संशोधन करने की अनुमति देती है। डेकोरेटर किसी वस्तु के व्यवहार को बढ़ाने या पूरी तरह से बदलने के लिए एक अमूर्त शैली में काम करता है।
डेकोरेटर बनाने का तरीका समझकर, आप अपने कोड को एक्स्टेंसिबल और अधिक पठनीय बनाते हैं। साथ ही, आप उनकी परिभाषाओं को बदले बिना भी अपनी आवश्यकताओं के अनुरूप कार्य प्राप्त करते हैं।
डेकोरेटर सिंटैक्स
नीचे दी गई शैली का पालन करें:
हीलियम का सिक्का कैसे खरीदें?
def decoratorFunc(args): # Code to you want to execute ... @decoratorFunc def existingFunction(args): # Code that you want to decorate ...
वैकल्पिक रूप से, आप इस तरह से कोशिश कर सकते हैं:
existingFunction = decoratorFunc(existingFunction)
पायथन में डेकोरेटर कैसे काम करता है?
मुख्य रूप से, डेकोरेटर एक निर्माण है जो एक फ़ंक्शन को लपेटता है, इसे मूल कोड को बदले बिना एक नई कार्यक्षमता देता है।
वे आउटपुट लौटाते हैं जो फ़ंक्शन के मूल व्यवहार से भिन्न हो सकता है।
जब किसी फ़ंक्शन को अलग-अलग परिस्थितियों में अलग-अलग तरीके से काम करना पड़ता है तो उनका उपयोग करना अच्छा होता है।
अपना डेकोरेटर बनाएं:
एक डेकोरेटर एक ऐसा फ़ंक्शन है जो फ़ंक्शन ऑब्जेक्ट को वापस कर सकता है या नहीं भी कर सकता है।
हम इसे उस फ़ंक्शन के शीर्ष पर रखते हैं जिसे हम सजाने के लिए चाहते हैं और इसे @ चिह्न के साथ पूर्व-फिक्स करते हैं।
तो, चलिए पहले डेकोरेटर फंक्शन बनाते हैं।
def decoratorFunc(fn): return 10
उपरोक्त डेकोरेटर फ़ंक्शन फ़ंक्शन के बजाय एक पूर्णांक देता है।
तो जब आप इसे किसी फ़ंक्शन पर लागू करते हैं, तो यह पूरी तरह से ओवरराइड हो जाएगा।
किसी फ़ंक्शन के लिए डेकोरेटर निर्दिष्ट करने का तरीका नीचे देखें।
@decoratorFunc def existingFunc(): print('Hello World!')
आइए अब सभी टुकड़ों को एक साथ लाएं।
def decoratorFunc(fn): return 10 @decoratorFunc def existingFunc(): print('Hello World!') existingFunc()
जब आप उपरोक्त कोड चलाते हैं, तो निम्न त्रुटि होती है।
line 8, in existingFunc() TypeError: 'int' object is not callable
ऐसा इसलिए है क्योंकि डेकोरेटर ने मौजूदा फ़ंक्शन को बदल दिया है और इसे 10 वापस करने के लिए मजबूर कर रहा है जो एक पूर्णांक है, कॉल करने योग्य वस्तु नहीं है।
नोट - डेकोरेटर का रिटर्न वैल्यू फंक्शन को बदल देता है, यानी, मौजूदाफनक।
वैसे, यदि आप हमारे द्वारा सजाए गए फ़ंक्शन को चलाना चाहते हैं, तो डेकोरेटर को इसे वापस कर दें। नीचे दिए गए कोड की जाँच करें।
def decoratorFunc(fn): def callExistingFunc(): print('%s was called.' % fn) fn() return callExistingFunc @decoratorFunc def existingFunc(): print('Hello World!') existingFunc()
उपरोक्त उदाहरण में, हमारा डेकोरेटर फ़ंक्शन एक फ़ंक्शन लौटा रहा है जो डेकोरेटेड फ़ंक्शन के नाम को प्रिंट करता है और इसे निष्पादित करता है।
हरोकू पर कलह बॉट की मेजबानी कैसे करें
निष्पादन का परिणाम इस प्रकार है:
was called. Hello World!
फ़्लोचार्ट:
निम्नलिखित आरेख आपके लिए डेकोरेटर अवधारणा को सरल बनाने का प्रयास करता है।
ज़रूर पढ़ें - पायथन में कार्य
जंजीर सज्जाकार
हम किसी फंक्शन को जितनी बार चाहें सजा सकते हैं। ऐसे में डेकोरेटर एक चेन इफेक्ट बनाते हैं।
आमतौर पर, शीर्ष पर डेकोरेटर अगले को नियंत्रण सौंपता है, और इस तरह से जारी रहता है।
उदाहरण के लिए, निम्नलिखित कोड देखें:
def top(func): def wrapper(*args, **kwargs): print('1' * 1) func(*args, **kwargs) print('1' * 1) return wrapper def middle(func): def wrapper(*args, **kwargs): print('2' * 2) func(*args, **kwargs) print('2' * 2) return wrapper def bottom(func): def wrapper(*args, **kwargs): print('3' * 3) func(*args, **kwargs) print('3' * 3) return wrapper @top @middle @bottom def myTest(anyString): print(anyString) myTest('Hello World!')
आप देख सकते हैं कि यह उदाहरण myTest() फ़ंक्शन पर तीन डेकोरेटर का उपयोग कर रहा है। निष्पादन के बाद परिणाम नीचे दिया गया है:
1 22 333 Hello World! 333 22 1
डेकोरेटर उदाहरण
सरल डेकोरेटर कार्यक्रम प्रदर्शित करने के लिए:
def decorate(func): def first(): func() print('This is the First Program on Decorators.') return first def hello_not_decorated(): print('Hello World!.
') print('This is an original function that is not decorated : ') hello_not_decorated() print('This is a decorated function :') @decorate def hello(): print('Hello World!.') hello()
# 1 आउटपुट:
This is an original function that is not decorated : Hello World!. This is a decorated function : Hello World!. This is the First Program on Decorators.
अंकगणितीय संचालन को सजाने:
def arithmetic_operations(func): def operators(a, b): func(a, b) print('The product is :', a*b) print('The division is :', a/b) print('The remainder is :', a%b) return operators print('This is a decorated function.') @arithmetic_operations def add_and_subtract(a, b): print('The addition is :', a + b) print('The subtraction is :', a - b) add_and_subtract(8, 4)
#2 आउटपुट:
This is a decorated function. The addition is : 12 The subtraction is : 4 The product is : 32 The division is : 2.0 The remainder is :
चेनिंग का उपयोग करके कई लाइनें प्रदर्शित करें:
def Chaining_of_decorators(func): print('This is an example of chaining of decorators implementation.') def Decorator_demo(func): print('This tutorial is about Decorators.') print('This is a decorated function.') @Chaining_of_decorators @Decorator_demo def hello(): print('Hello World!') hello
#3 आउटपुट:
This is a decorated function. This tutorial is about Decorators. This is an example of chaining of decorators implementation.
डेकोरेटर को तर्क दें:
def argument_for_decorator(argument1, argument2): def decorator(function): def wrapper(*args): print('%s%s' % (argument1, argument2)) function(*args) print('Congratulations. You decorated a function.') return wrapper return decorator @argument_for_decorator('Hello ', 'World!') def print_args(*args): print('The Fibonacci Sequence upto number 8.') for arg in args: print(arg) print_args(1, 1, 2, 3, 5, 8)
# 4 आउटपुट:
Hello World! The Fibonacci Sequence upto number 8. 1 1 2 3 5 8 Congratulations. You decorated a function.
हम चाहते हैं कि उपरोक्त पायथन डेकोरेटर ट्यूटोरियल आपको वास्तविक पायथन कार्यक्रमों में उनका उपयोग करने का एक उचित विचार दे।
#पायथन
www.techbeamers.com
पायथन में सज्जाकार
मूल रूप से . द्वारा प्रकाशित मीनाक्षी अग्रवाल पर टी एकबीमर्स