जानें कि यह वैकल्पिक फ़ंक्शन प्रकार आपको मेमोरी फ़ुटप्रिंट को कम करने में कैसे मदद कर सकता है।

यदि आप किसी लॉग फ़ाइल से लाइनें पढ़ रहे हैं या आइटमों की लंबी सूची संसाधित कर रहे हैं, तो एक विकल्प पूरे डेटा को मेमोरी में लोड करना है। हालाँकि, यह दृष्टिकोण बहुत अधिक मेमोरी का उपयोग कर सकता है और प्रदर्शन में बाधा उत्पन्न कर सकता है। जेनरेटर एक मूल्यवान समाधान प्रदान करते हैं।

जेनरेटर सभी डेटा को एक साथ मेमोरी में लोड करने की आवश्यकता को समाप्त कर देते हैं। वे बड़े डेटासेट, अनंत अनुक्रमों या किसी भी परिदृश्य को संभालते समय उपयोगी होते हैं जहां मेमोरी दक्षता सर्वोपरि होती है।

जेनरेटर क्या हैं?

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

नियमित पायथन फ़ंक्शन आम तौर पर एक मान की गणना करता है और उसे लौटाता है। लेकिन जनरेटर अलग तरह से काम करते हैं। वे प्रत्येक उपज के बीच निष्पादन को रोककर और फिर से शुरू करके समय के साथ कई मान प्राप्त कर सकते हैं।

instagram viewer

नियमित कार्यों और जेनरेटर के बीच मुख्य अंतर यह है कि इसके उपयोग के बजाय वापस करना परिणाम उत्पन्न करने के लिए कीवर्ड, जनरेटर का उपयोग करते हैं उपज.

जेनरेटर कैसे बनाएं

के बजाय, एक जनरेटर बनाने के लिए वापस करना कथन, ए का उपयोग करें उपज फ़ंक्शन के भीतर कथन. उपज कीवर्ड न केवल फ़ंक्शन को एक मान लौटाने का निर्देश देता है, बल्कि उसे भविष्य में फिर से शुरू करने की अनुमति देते हुए, उसकी स्थिति को बचाने की सुविधा भी देता है।

यहां एक सरल जनरेटर फ़ंक्शन का उदाहरण दिया गया है:

defnumeric_generator():
yield1
yield2
yield3

gen = numeric_generator()

यह जनरेटर फ़ंक्शन 1 से 3 तक संख्यात्मक मान उत्पन्न करता है।

उपज स्टेटमेंट फ़ंक्शन की स्थिति को सहेजता है, कॉल के बीच स्थानीय चर को संरक्षित करता है, ताकि जब आप अगले मान का अनुरोध करें तो फिर से शुरू हो सके।

किसी वेरिएबल के लिए जेनरेटर फ़ंक्शन असाइन करने से एक जेनरेटर ऑब्जेक्ट बनता है जिसके साथ आप काम कर सकते हैं।

जेनरेटर के साथ काम करना

जेनरेटर के कई अनुप्रयोग होते हैं। आप उनका उपयोग कर सकते हैं लूप के लिए या सूची समझ के भीतर, साथ ही अन्य पुनरावर्तनीय संरचनाएँ। जेनरेटर कार्यों के लिए तर्क के रूप में भी काम कर सकते हैं।

एक बार जब आप जनरेटर बना लेते हैं, तो आप लूप का उपयोग करके उस पर पुनरावृति कर सकते हैं:

for i in numeric_generator():
print(i)

आप भी उपयोग कर सकते हैं अगला एक-एक करके मान पुनः प्राप्त करने का कार्य:

print(next(gen)) # 1
print(next(gen)) # 2
print(next(gen)) # 3

इससे आपको जेनरेटर ऑब्जेक्ट पर अधिक नियंत्रण मिलता है।

जेनरेटर अपनी स्थिति पर नज़र रख सकते हैं। किसी फ़ंक्शन में प्रत्येक उपज विवरण एक चेकपॉइंट की तरह कार्य करता है। जब आप कॉल करते हैं अगला() जनरेटर ऑब्जेक्ट पर फ़ंक्शन, निष्पादन पिछले उपज बिंदु से शुरू होता है।

आप इसका उपयोग करके जनरेटर में मान भी पास कर सकते हैं भेजना():

defgenerator_with_send():
# First yield: Receive a value
x = yield
print(f"Received: {x}")

# Second yield: Receive another value
y = yield
print(f"Received: {y}")

# Third yield: Yield the sum
yield x + y

gen = generator_with_send()

# Start generator and reach first yield
next(gen)

# Send 10 into generator, received at first yield
result = gen.send(10)

# Send 5 into generator, received at second yield
result = gen.send(5)

# Print result of third yield
print(result)

भेजना() विधि आपको जनरेटर से मान पुनर्प्राप्त करने और जनरेटर फ़ंक्शन में मान वापस भेजने, इसे प्रभावी ढंग से रोकने और इसके निष्पादन को नियंत्रित करने की अनुमति देती है। भेजना() कोरआउटिन लिखते समय या उन्नत उद्देश्यों के लिए जेनरेटर का उपयोग करते समय यह विधि उपयोगी होती है।

जेनरेटर एक्सप्रेशंस का उपयोग करना

जेनरेटर एक्सप्रेशन एक सरल और गुमनाम जेनरेटर बनाने का संक्षिप्त तरीका प्रदान करते हैं। वे सूची बोध के समान हैं लेकिन कोष्ठक के बजाय कोष्ठक का उपयोग करते हैं।

यहाँ एक उदाहरण है:

gen = (i**2for i in range(10))

for x in gen:
print(x)

कोड एक जेनरेटर अभिव्यक्ति बनाता है जो 0 से 9 तक संख्याओं के वर्ग उत्पन्न करता है। जेनरेटर अभिव्यक्तियाँ आलस्य से मूल्यों का अनुक्रम उत्पन्न करने के लिए आदर्श हैं।

डेटा प्रोसेसिंग के लिए जेनरेटर का उपयोग करना

पायथन जेनरेटर डेटा स्ट्रीम का वर्णन करने और सब कुछ मेमोरी में रखे बिना इटरेटर बनाने का एक सुविधाजनक तरीका है। आप जनरेटर का उपयोग करना सीखकर अपनी प्रोग्रामिंग में उल्लेखनीय सुधार कर सकते हैं, जिससे चुनौतीपूर्ण डेटा-प्रोसेसिंग कार्यों को संभालना आसान हो जाएगा।

अगली बार जब आप बड़े डेटासेट के साथ काम करें, तो जनरेटर को ध्यान में रखें और श्रम-गहन कार्यों को उन्हें सौंप दें, ताकि आपका कोड प्रतिक्रियाशील और कुशल बना रहे।