उपप्रोग्राम क्या है और क्यों?
उपप्रोग्राम प्रोग्राम का अपने नाम वाला हिस्सा है जो एक काम करता है। कुछ भाषाएँ इसे प्रक्रिया (procedure), कुछ फ़ंक्शन, कुछ मेथड कहती हैं। आप उसे एक बार परिभाषित करते हैं और जब चाहें कॉल (बुलाना) करते हैं।
उपप्रोग्राम क्यों?
- दोहराव नहीं: वही पंक्तियाँ एक बार लिखी जाती हैं।
- सुधारना आसान: एक जगह बदलिए और हर कॉल सुधर जाती है।
- पढ़ना आसान:
is_primeजैसा अच्छा नाम बता देता है कि क्या होता है। - काम बाँटना आसान: बड़ा काम छोटे कामों में बँटता है, और हर एक उपप्रोग्राम बनता है।
परिभाषित करना और कॉल करना
Python में उपप्रोग्राम def से शुरू होता है, फिर नाम, कोष्ठक, कोलन और भीतर खिसका हुआ हिस्सा। इस्तेमाल करने के लिए नाम को कोष्ठक के साथ लिखिए: यह कॉल है।
def square(x):
return x * x
print(square(5)) # 25प्रोग्राम जब square(5) पर पहुँचता है, तो उपप्रोग्राम में कूदता है, उसकी पंक्तियाँ चलाता है और उसी जगह लौट आता है। उपप्रोग्राम उसे बुलाने वाली पंक्ति चलने से पहले परिभाषित होना चाहिए।
पैरामीटर और तर्क (आर्ग्युमेंट)
उपप्रोग्राम को अक्सर इनपुट चाहिए। परिभाषा में लिखे नाम उसके पैरामीटर हैं (जैसे def square(x) में x)। कॉल में आप जो मान देते हैं वे तर्क (आर्ग्युमेंट) हैं (जैसे square(5) में 5)। पहला तर्क पहले पैरामीटर में जाता है, दूसरा दूसरे में, और इसी तरह, इसलिए क्रम मायने रखता है।
उपप्रोग्राम के भीतर बने चर और उसके पैरामीटर स्थानीय (लोकल) होते हैं: वे केवल उपप्रोग्राम चलते समय जीवित रहते हैं। प्रोग्राम के दूसरे हिस्से उन्हें नहीं देख सकते। इसलिए दो अलग उपप्रोग्राम बिना टकराव के x जैसा नाम इस्तेमाल कर सकते हैं।
उपप्रोग्राम के कई पैरामीटर हो सकते हैं: def area(a, b): return a * b और area(3, 5) का उत्तर 15 है। उसके कोई पैरामीटर न भी हों: def hello(): print("Hi")।
प्रक्रिया और फ़ंक्शन: return
प्रक्रिया कोई क्रिया करती है (जैसे एक पंक्ति छापना) और कुछ वापस नहीं देती। फ़ंक्शन कुछ निकालता है और return से मान वापस देता है। लौटाए गए मान को सहेजा जा सकता है या व्यंजक में इस्तेमाल किया जा सकता है:
def add(a, b):
return a + b
total = add(2, 3) + 1 # total = 6Python को return मिलते ही उपप्रोग्राम तुरंत रुक जाता है और मान लौटा देता है। जिस उपप्रोग्राम में return नहीं होता, वह विशेष मान None लौटाता है। ध्यान दीजिए: print मान को स्क्रीन पर दिखाता है; return मान प्रोग्राम को सौंपता है। दोनों एक नहीं हैं।
तार्किक फ़ंक्शन
तार्किक (बूलियन) फ़ंक्शन केवल True या False लौटाता है। वह अपने तर्कों के बारे में हाँ/नहीं वाले प्रश्न का उत्तर देता है। अच्छे नाम is_ या has_ से शुरू होते हैं।
def is_even(n):
return n % 2 == 0
if is_even(10):
print("even")कॉल को सीधे शर्त के भीतर इस्तेमाल कर सकते हैं: if is_even(n):। दो और उदाहरण:
def in_range(x, a, b):
return a <= x <= b
def is_leap(y):
return (y % 4 == 0 and y % 100 != 0) or y % 400 == 0तार्किक फ़ंक्शन मुख्य प्रोग्राम को छोटा रखते हैं: कठिन जाँच साफ़ नाम के पीछे छिप जाती है और उसे दोबारा इस्तेमाल कर सकते हैं, जैसे सूची में कितनी संख्याएँ जाँच में पास होती हैं गिनने के लिए।
मुख्य सूत्र और परिभाषाएँ
- def नाम(पैरामीटर): भाग → कॉल: नाम(तर्क)
- पैरामीटर = परिभाषा का नाम; तर्क = कॉल का मान; क्रम मायने रखता है
- फ़ंक्शन: मान return करता है; प्रक्रिया: कोई मान नहीं (Python में None)
- तार्किक फ़ंक्शन True या False लौटाता है: if is_even(n): ...
- स्थानीय चर और पैरामीटर केवल उपप्रोग्राम के भीतर रहते हैं
हल किए गए उदाहरण
1. def square(x): return x * x के साथ square(4) + square(3) क्या है?
square(4) = 16 और square(3) = 9। 16 + 9 = 25।
2. def area(a, b): return a * b। area(3, 5) क्या लौटाता है?
a = 3 और b = 5, इसलिए 3 × 5 = 15 लौटाता है।
3. def maximum(a, b): अगर a > b तो return a, नहीं तो return b। maximum(7, 12) क्या है?
7 > 12 False है, इसलिए else वाला भाग चलता है और 12 लौटता है।
4. is_even(n) n % 2 == 0 लौटाता है। is_even(9) और is_even(10) निकालिए।
9 % 2 = 1, इसलिए 1 == 0 False है। 10 % 2 = 0, इसलिए 0 == 0 True है। उत्तर: False और True।
5. (y % 4 == 0 and y % 100 != 0) or y % 400 == 0 से is_leap(2100), is_leap(2000) और is_leap(2024) जाँचिए।
2100: 4 और 100 से विभाज्य, 400 से नहीं, इसलिए False। 2000: 400 से विभाज्य, इसलिए True। 2024: 4 से विभाज्य, 100 से नहीं, इसलिए True।
6. def f(x): return 2 * x + 1। f(f(2)) क्या है?
f(2) = 2 × 2 + 1 = 5। फिर f(5) = 2 × 5 + 1 = 11।
आम गलतियाँ
- फ़ंक्शन के भीतर return की जगह print लिखकर नतीजा इस्तेमाल करने की कोशिश करना। print केवल दिखाता है; कॉल None लौटाती है।
- तर्कों का क्रम बदल देना। def power(a, n) के लिए power(2, 3) और power(3, 2) एक जैसे नहीं हैं।
- स्थानीय चर को उसके उपप्रोग्राम के बाहर इस्तेमाल करना। फ़ंक्शन के भीतर बना चर कॉल के बाद ख़त्म हो जाता है।
- कोष्ठक भूल जाना: square उपप्रोग्राम है; square(5) कॉल है और मान देती है।