📘 CodingMarble Learn

पायथन में फ़ंक्शन: अपनी मशीनें ख़ुद बनाइए

फ़ंक्शन एक नाम वाला कोड-खंड है जो एक काम करता है। पायथन में बिल्ट-इन फ़ंक्शन (print, len), मॉड्यूल के फ़ंक्शन (math.sqrt, random.randint) और def से बने यूज़र-डिफ़ाइंड फ़ंक्शन होते हैं। कॉल में भेजे मान आर्ग्युमेंट हैं; उन्हें पकड़ने वाले नाम पैरामीटर हैं। आर्ग्युमेंट स्थान के अनुसार (positional), नाम से (keyword) या डिफ़ॉल्ट मान से आते हैं। return मान वापस भेजता है। पायथन ऊपर से नीचे चलता है, कॉल पर फ़ंक्शन में कूदता है और फिर लौट आता है। फ़ंक्शन के अंदर बने नाम लोकल, बाहर बने ग्लोबल होते हैं।

🎬 कदम-दर-कदम कहानी

  1. फ़ंक्शन एक नाम वाली मशीन है। def मशीन बनाता है। कॉल किए बिना कुछ नहीं चलता।
  2. कॉल से आर्ग्युमेंट अंदर जाते हैं। पैरामीटर वे खाँचे हैं जो उन्हें क्रम से पकड़ते हैं।
  3. कोई आर्ग्युमेंट न मिले तो डिफ़ॉल्ट मान खाँचा भर देता है। डिफ़ॉल्ट हमेशा अंत में आते हैं।
  4. return एक उत्तर वापस कॉल करने वाले को भेजता है। return न हो तो फ़ंक्शन None लौटाता है।
  5. पायथन ऊपर से पढ़ता है। कॉल पर फ़ंक्शन में कूदता है, उसे चलाता है, फिर उसी पंक्ति पर लौटता है।
  6. आपकी बारी: फ़ंक्शन के अंदर बने नाम वहीं रहते हैं (लोकल)। ग्लोबल नाम पढ़कर और बदलकर देखें।

टिप: 3D दृश्य को घुमाने के लिए खींचें। ज़ूम के लिए दो उंगलियाँ इस्तेमाल करें।

🤔 आम शंकाएँ और उनके जवाब

सिर्फ़ def लिखने पर कुछ क्यों नहीं होता?

def केवल मशीन बनाकर नाम देता है। बॉडी तब चलती है जब आप कॉल करें, जैसे add(2, 3)।

क्या पैरामीटर और आर्ग्युमेंट एक ही हैं?

नहीं। पैरामीटर def पंक्ति के खाँचों के नाम हैं। आर्ग्युमेंट कॉल में भेजे असली मान हैं।

def f(a=1, b) एरर क्यों है?

आर्ग्युमेंट बाएँ से खाँचे भरते हैं। डिफ़ॉल्ट वाले के बाद बिना डिफ़ॉल्ट खाँचा हो तो उलझन होगी, इसलिए डिफ़ॉल्ट अंत में।

फ़ंक्शन में print और return में क्या अंतर है?

print केवल स्क्रीन पर दिखाता है। return मान वापस देता है ताकि आप उसे रख या इस्तेमाल कर सकें: ans = f(3)।

मेरे फ़ंक्शन ने ग्लोबल वेरिएबल क्यों नहीं बदला?

अंदर मान देने से नया लोकल नाम बनता है। बाहर वाला x बदलने के लिए पहले global x लिखें।

फ़ंक्शन ख़त्म होने के बाद पायथन कहाँ जाता है?

ठीक उसी पंक्ति पर जहाँ से कॉल हुआ था, और वहाँ से आगे चलता है।

फ़ंक्शन क्यों? बिल्ट-इन, मॉड्यूल और यूज़र-डिफ़ाइंड

फ़ंक्शन एक नाम वाला कोड-खंड है जो एक काम करता है। इससे एक ही कोड बार-बार नहीं लिखना पड़ता, और प्रोग्राम पढ़ना-सुधारना आसान होता है।

def greet(name):
    print('Hello', name)

greet('Asha')

पहली पंक्ति हेडर है (अंत में कोलन)। खिसकी हुई (indented) पंक्तियाँ बॉडी हैं।

पैरामीटर और आर्ग्युमेंट

पैरामीटर वह नाम है जो def पंक्ति में लिखा होता है। आर्ग्युमेंट वह असली मान है जो कॉल में भेजा जाता है। def area(l, b) में l और b पैरामीटर हैं। area(5, 3) में 5 और 3 आर्ग्युमेंट हैं।

आर्ग्युमेंट को वास्तविक पैरामीटर और पैरामीटर को औपचारिक पैरामीटर भी कहते हैं।

पोज़िशनल, कीवर्ड और डिफ़ॉल्ट आर्ग्युमेंट

पोज़िशनल आर्ग्युमेंट

स्थान से मिलते हैं: पहला आर्ग्युमेंट → पहला पैरामीटर। power(2, 3) यानी base = 2, exp = 3। संख्या बराबर होनी चाहिए।

डिफ़ॉल्ट आर्ग्युमेंट

पैरामीटर का पहले से तय मान: def power(base, exp=2):। अब power(5) = 25 और power(5, 3) = 125। नियम: डिफ़ॉल्ट वाले पैरामीटर बिना डिफ़ॉल्ट वालों के बाद आएँ। def f(a=1, b): एरर है।

कीवर्ड आर्ग्युमेंट

कॉल में पैरामीटर का नाम लिख सकते हैं: power(exp=3, base=2)। तब क्रम से फ़र्क नहीं पड़ता। कॉल में पोज़िशनल आर्ग्युमेंट कीवर्ड वालों से पहले आते हैं।

मान लौटाना (return)

return फ़ंक्शन ख़त्म करता है और मान को वहाँ भेजता है जहाँ से कॉल हुआ था।

def square(n):
    return n * n

ans = square(4)   # ans = 16

निष्पादन का क्रम (flow of execution)

पायथन ऊपर से नीचे चलता है। def खंड केवल पढ़कर याद रखा जाता है; उसकी बॉडी तब नहीं चलती। कॉल आने पर नियंत्रण फ़ंक्शन में कूदता है, उसे चलाता है और return (या बॉडी के अंत) पर कॉल वाली पंक्ति पर लौट आता है। कॉल वाली पंक्ति से पहले फ़ंक्शन डिफ़ाइन होना ज़रूरी है।

1 def add(a, b):
2     return a + b
3 x = 4
4 y = add(x, 6)
5 print(y)

क्रम: 1 → 3 → 4 → 1 → 2 → 4 → 5। आउटपुट: 10।

स्कोप: लोकल और ग्लोबल वेरिएबल

स्कोप प्रोग्राम का वह हिस्सा है जहाँ कोई नाम इस्तेमाल हो सकता है।

x = 10
def f():
    x = 5        # नया लोकल x
    print(x)     # 5
f(); print(x)    # 10

def g():
    global x
    x = 99
g(); print(x)    # 99

पायथन नाम इस क्रम में खोजता है: लोकल → एनक्लोज़िंग → ग्लोबल → बिल्ट-इन (LEGB नियम)।

लिस्ट भेजना

लिस्ट भेजकर अंदर append करें तो बाहर भी बदलाव दिखता है (लिस्ट म्यूटेबल है, वही ऑब्जेक्ट साझा है)। int भेजकर अंदर n += 1 करने से बाहर वाला int नहीं बदलता।

करके देखें: बिल मशीन बनाइए

def bill(price, qty=1, gst=18): लिखिए जो कुल रकम लौटाए। चलाने से पहले bill(100), bill(100, 3) और bill(100, gst=5) का उत्तर अनुमान से लिखिए। फिर चलाकर मिलाइए। अब फ़ंक्शन के बाहर print(price) लिखिए और NameError देखिए: price लोकल है।

मुख्य सूत्र और परिभाषाएँ

हल किए गए उदाहरण

1. पैरामीटर और आर्ग्युमेंट पहचानिए: def area(l, b): return l*b ... print(area(7, 4))

पैरामीटर: l और b (def पंक्ति में)। आर्ग्युमेंट: 7 और 4 (कॉल में)। आउटपुट: 28।

2. def power(base, exp=2): return base ** exp। power(3), power(3, 3), power(exp=0, base=9) बताइए।

power(3): exp डिफ़ॉल्ट 2 → 9। power(3, 3) → 27। power(exp=0, base=9): नाम से मिले → 9 ** 0 = 1।

3. कौन-से हेडर सही हैं? (a) def f(a, b=1) (b) def f(a=1, b) (c) def f(a=1, b=2)

(a) सही। (b) गलत: डिफ़ॉल्ट वाले के बाद बिना डिफ़ॉल्ट पैरामीटर नहीं आ सकता। (c) सही।

4. निष्पादन क्रम लिखिए: 1 def sq(n): 2 return n*n 3 a = 3 4 print(sq(a) + 1)

1 (def याद) → 3 → 4 (कॉल) → 1 → 2 (9 लौटा) → 4 (10 छपा)।

5. x = 5 def f(): x = 20 print('in', x) f() print('out', x)

f के अंदर x = 20 से लोकल x बना। आउटपुट: in 20, फिर out 5। ग्लोबल x नहीं बदला।

6. एक फ़ंक्शन stats(L) लिखिए जो लिस्ट का योग और औसत लौटाए। [4, 8, 6] के लिए चलाइए।

def stats(L): s = sum(L) return s, s / len(L) t, a = stats([4, 8, 6]) print(t, a) # 18 6.0

7. c = 0 def inc(): global c c += 1 inc(); inc(); print(c)

global c से फ़ंक्शन ग्लोबल c बदल पाता है। दो कॉल = दो बार +1। आउटपुट: 2। global के बिना UnboundLocalError आता।

आम गलतियाँ

अभ्यास क्विज़

1. def f(a, b): में a और b हैं:
2. return न हो तो फ़ंक्शन क्या लौटाता है?
3. कौन-सा हेडर गलत है?
4. math.sqrt() है:
5. कौन-सा कीवर्ड फ़ंक्शन को बाहर बना वेरिएबल बदलने देता है?

अभ्यास: खुद जवाब दो

अपना जवाब लिखो या चुनो, फिर जाँचें दबाओ। अटको तो संकेत देखो; जवाब देने के बाद पूरा हल दिखेगा।

अक्सर पूछे जाने वाले प्रश्न

कक्षा 12 में पायथन फ़ंक्शन के कितने प्रकार हैं?

बिल्ट-इन (जैसे len), मॉड्यूल के फ़ंक्शन (जैसे math.sqrt) और def से बने यूज़र-डिफ़ाइंड फ़ंक्शन।

लोकल और ग्लोबल वेरिएबल में क्या अंतर है?

लोकल फ़ंक्शन के अंदर बनता है और वहीं रहता है। ग्लोबल सब फ़ंक्शनों के बाहर बनता है और हर जगह पढ़ा जा सकता है।

पायथन में डिफ़ॉल्ट आर्ग्युमेंट क्या है?

def पंक्ति में पहले से दिया मान, जैसे exp=2। कॉल में मान न मिले तो डिफ़ॉल्ट लगता है।

यह कहाँ पढ़ाया जाता है

कनाडा (ओंटारियो)Grade 11A. Programming Concepts and Skills
रोमानियाClasa a IX-aStoring data and organising code in a programming language
रोमानियाClasa a IX-aStoring data and organising code in a programming language
रोमानियाClasa a IX-aStoring data and organising code in a programming language
रोमानियाClasa a XI-aSubprograms
सीबीएसई (भारत)कक्षा 12संगणनात्मक चिंतन और प्रोग्रामिंग - 2
इंग्लैंडYear 103.2 Programming
दक्षिण कोरिया고등학교 3학년Programming
रूस10 классAlgorithms and programming

पहले यह पढ़ें

आगे पढ़ें

इससे जुड़े पाठ

सभी कंप्यूटर विज्ञान पाठ