Follow Us
माध्यम चुनें / Select Medium:
Eng (English) Beng (বাংলা) Hindi (हिन्दी)
WBB • कक्षा XII • Computer Science • अध्याय 1
अनुमानित समय: 120 Mins
प्रगति: अध्ययनरत

Programming in Python (पायथन में प्रोग्रामिंग)

पश्चिम बंगाल उच्चतर माध्यमिक शिक्षा परिषद (WBCHSE) कक्षा 12 कंप्यूटर साइंस पाठ्यक्रम के प्रथम अध्याय 'पायथन में प्रोग्रामिंग' (Programming in Python) के इस प्रामाणिक एवं विस्तृत अध्ययन गाइड में आपका स्वागत है। पायथन एक आधुनिक, उच्चस्तरीय, इंटरप्रिटेड, डायनामिकली टाइप्ड एवं ऑब्जेक्ट-उन्मुख प्रोग्रामिंग भाषा है, जो अपनी सरल वाक्य-संरचना (Syntax) और विशाल मानक लाइब्रेरी के लिए विश्वविख्यात है। इस अध्याय में विद्यार्थी कक्षा 11 के प्रोग्रामिंग सिद्धांतों के आधार पर पायथन के आंतरिक आर्किटेक्चर का गहन अध्ययन करेंगे। सोर्स कोड (.py) किस प्रकार पार्सर द्वारा एब्सट्रैक्ट सिंटैक्स ट्री (AST) और मध्यवर्ती बाइटकोड (.pyc) में संकलित होकर पायथन वर्चुअल मशीन (PVM) पर निष्पादित होता है, इसका सूक्ष्म विश्लेषण प्रस्तुत किया गया है। इसके अतिरिक्त पायथन का मेमोरी मॉडल, ऑब्जेक्ट संदर्भ, म्यूटेबल बनाम इम्यूटेबल डेटा प्रकारों का व्यवहार, स्ट्रिंग, लिस्ट व टपल का स्लाइसिंग कैलकुलस, डिक्शनरी एवं सेट की हैश-टेबल कार्यप्रणाली, फंक्शन्स में चर आर्गुमेंट्स (*args, **kwargs), LEGB स्कोप पदानुक्रम, फाइल I/O तथा ट्राई-एक्सेप्ट अपवाद प्रबंधन की संपूर्ण संकल्पनाएं WBCHSE बोर्ड परीक्षा हेतु स्पष्ट की गई हैं।

यह अध्याय क्यों महत्वपूर्ण है

आधुनिक सॉफ्टवेयर इंजीनियरिंग, डेटा साइंस, क्लाउड कंप्यूटिंग एवं आर्टिफिशियल इंटेलिजेंस (AI) क्रांति की धुरी पायथन भाषा ही है। WBCHSE कक्षा 12 के छात्रों के लिए पायथन की दक्षता केवल बोर्ड परीक्षा में उत्तम अंक अर्जित करने तक सीमित नहीं है, बल्कि यह उच्च तकनीकी करियर और कंप्यूटर इंजीनियरिंग का सुदृढ़ प्रवेश द्वार है। पायथन के संदर्भ गणना (Reference Counting) एवं मेमोरी प्रबंधन को समझने से सॉफ्टवेयर में मेमोरी लीक्स से बचा जा सकता है। म्यूटेबल (परिवर्तनीय) और इम्यूटेबल (अपरिवर्तनीय) डेटा संरचनाओं का अंतर जानने से बड़े सॉफ्टवेयर प्रोजेक्ट्स में अप्रत्याशित बग्स और रनटाइम क्रैश को रोका जा सकता है। इसके अलावा मजबूत अपवाद प्रबंधन और फाइल हैंडलिंग का ज्ञान विद्यार्थियों को व्यावहारिक डेटा प्रोसेसिंग और सुरक्षित प्रोडक्शन-ग्रेड सॉफ्टवेयर विकसित करने की क्षमता प्रदान करता है।

अध्याय रूपरेखा एवं प्रगति

1 1. पायथन इतिहास, संरचना एवं CPython...
2 2. मेमोरी मॉडल, ऑब्जेक्ट परिवर्तनीय...
3 3. सशर्त शाखा नियंत्रण, पुनरावृत्ति...
4 4. अनुक्रम डेटा प्रकार: स्ट्रिंग, ल...
5 5. हैश संग्रह: डिक्शनरी एवं गणितीय...
6 6. मॉड्यूलर फंक्शन्स, LEGB स्कोप, फ...

सम्पूर्ण सैद्धांतिक एवं वैचारिक अध्ययन

1. पायथन इतिहास, संरचना एवं CPython निष्पादन पाइपलाइन

1.1 पायथन का इतिहास, विशेषताएं एवं CPython निष्पादन पाइपलाइन

पायथन का विकास 1980 के दशक के उत्तरार्ध में डच कंप्यूटर वैज्ञानिक गुइडो वैन रोसुम (Guido van Rossum) द्वारा नीदरलैंड के Centrum Wiskunde & Informatica (CWI) में प्रारंभ किया गया था। इसका पहला आधिकारिक संस्करण फरवरी 1991 में जारी हुआ। पायथन की मूल अवधारणा कोड की सरलता, स्पष्ट सिंटैक्स और बहु-प्रतिमान (Multi-paradigm: प्रक्रियात्मक, ऑब्जेक्ट-उन्मुख एवं कार्यात्मक) प्रोग्रामिंग का समर्थन करना है।

पायथन की मुख्य आर्किटेक्चरल विशेषताएं:
  • हाइब्रिड अनुवाद प्रणाली (Hybrid Execution): पायथन विशुद्ध संकलित (C/C++ की भांति) या विशुद्ध रूप से पंक्ति-दर-पंक्ति व्याख्यायित भाषा नहीं है। मानक CPython सोर्स कोड को पहले एक मध्यवर्ती बाइटकोड (.pyc) में संकलित करता है, जिसे बाद में वर्चुअल मशीन निष्पादित करती है।
  • डायनामिक टाइपिंग (Dynamically Typed): प्रोग्रामर को चरों के प्रकार (int, float आदि) पहले से घोषित नहीं करने पड़ते; रनटाइम पर मान के आधार पर प्रकार स्वतः निर्धारित होता है।
  • स्वचालित मेमोरी प्रबंधन: रेफरेंस काउंटिंग (Reference Counting) एवं चक्रीय गारबेज कलेक्टर की सहायता से अप्रयुक्त मेमोरी स्वतः मुक्त हो जाती है।
  • बैटरिज इनक्लूडेड (Batteries Included): गणितीय कार्यों, फाइल सिस्टम, नेटवर्किंग एवं डेटा स्ट्रक्चर्स हेतु समृद्ध अंतर्निहित लाइब्रेरी उपलब्ध रहती है।
1.2 CPython निष्पादन के 4 प्रमुख चरण
चरण घटक / प्रक्रिया कार्यप्रणाली एवं परिणाम
1. लेक्सिकल विश्लेषण टोकनाइज़र (Tokenizer) सोर्स कोड को मूल टोकन्स में तोड़ता है (कीवर्ड्स, पहचानकर्ता, ऑपरेटर, लिटरल एवं इंडेंटेशन टोकन्स INDENT/DEDENT)।
2. सिंटैक्टिक पार्सिंग पार्सर (Parser) व्याकरण की वैधता जांचकर मेमोरी में एब्सट्रैक्ट सिंटैक्स ट्री (AST) बनाता है। किसी भी अमान्य सिंटैक्स पर SyntaxError इसी चरण में उठता है।
3. बाइटकोड संकलन कोड जनरेटर AST से प्लेटफॉर्म-स्वतंत्र बाइटकोड (.pyc) तैयार करता है जो pycache फोल्डर में सुरक्षित हो जाता है।
4. वर्चुअल मशीन रनटाइम पायथन वर्चुअल मशीन (PVM) एक स्टैक-आधारित इंटरप्रेटर लूप जो बाइटकोड निर्देशों को पंक्तिबद्ध रूप से पढ़कर प्रोसेसर के मशीन निर्देशों में बदलता है।
1.3 सिंटैक्टिक इंडेंटेशन (Indentation) एवं PEP 8 मानक

पायथन में कोड ब्लॉक को दर्शाने के लिए कर्ली ब्रैकेट्स {} का प्रयोग नहीं होता; इसके स्थान पर इंडेंटेशन (खाली स्थान) अनिवार्य है:

  • इंडेंटेशन नियम (PEP 8): प्रत्येक स्तर के ब्लॉक हेतु ठीक 4 स्पेस (Spaces) का उपयोग मानक माना जाता है। टैब और स्पेस का मिश्रण वर्जित है (पायथन 3 में इससे TabError उत्पन्न होता है)।
  • चरों के नामकरण के नियम (Identifiers): नाम वर्णमाला (A-Z, a-z) अथवा अंडरस्कोर (_) से ही प्रारंभ होना चाहिए। यह केस-संवेदी (Case-sensitive) है (उदा. Total और total अलग हैं)। आरक्षित कीवर्ड्स (उदा. def, class, if, return) का चर के रूप में उपयोग वर्जित है।
  • टिप्पणियां (Comments) एवं डॉकस्ट्रिंग: एकल पंक्ति टिप्पणी हेतु # तथा बहु-पंक्ति दस्तावेज़ीकरण हेतु ट्रिपल कोट्स """...""" का प्रयोग किया जाता है, जिसे .doc से पढ़ा जा सकता है।

2. मेमोरी मॉडल, ऑब्जेक्ट परिवर्तनीयता एवं ऑपरेटर यांत्रिकी

2.1 पायथन मेमोरी मॉडल: ऑब्जेक्ट संदर्भ के रूप में चर

पारंपरिक भाषाओं में चर एक मेमोरी बॉक्स होता है जिसमें डेटा सुरक्षित होता है। पायथन में सब कुछ एक ऑब्जेक्ट है। चर केवल हीप मेमोरी में उपस्थित ऑब्जेक्ट का एक संदर्भ सूचक (Reference Pointer / Name Tag) होता है:

# मेमोरी संदर्भ एवं id() का प्रदर्शन
x = 300
y = x
print(id(x) == id(y))  # True: दोनों एक ही ऑब्जेक्ट को इंगित करते हैं
print(x is y)          # True: पहचान समानता

x = x + 1              # नया इंटीजर ऑब्जेक्ट 301 बना; x को नया पता मिला
print(id(x) == id(y))  # False: x अब नए पते पर है
print(y)               # 300: y मूल ऑब्जेक्ट को ही इंगित कर रहा है
2.2 परिवर्तनीय बनाम अपरिवर्तनीय डेटा प्रकार (Mutable vs. Immutable)

प्रत्येक ऑब्जेक्ट में तीन गुण होते हैं: पहचान (id()), प्रकार (type()), एवं मान (Value)।

वर्गीकरण डेटा प्रकार मेमोरी संशोधन व्यवहार हैश योग्यता एवं डिक्शनरी कीज
इम्यूटेबल (Immutable - अपरिवर्तनीय) int, float, complex, bool, str, tuple, frozenset सृजन के पश्चात इसके आंतरिक मान को बदला नहीं जा सकता। किसी भी परिवर्तन पर मेमोरी में नया ऑब्जेक्ट बनता है। हैशेबल (Hashable): डिक्शनरी कीज एवं सेट तत्वों हेतु पूर्णतः सुरक्षित।
म्यूटेबल (Mutable - परिवर्तनीय) list, dict, set मेमोरी का पता बदले बिना उसी स्थान (in-place) पर तत्वों को जोड़ा, हटाया या बदला जा सकता है। अनहैशेबल (Unhashable): डिक्शनरी कीज में उपयोग करने पर TypeError आता है।
2.3 ऑपरेटरों की श्रेणियां एवं प्राथमिकता नियम

पायथन ऑपरेटरों की प्रमुख कार्यप्रणाली:

  • अंकगणितीय ऑपरेटर: +, -, *, वास्तविक विभाजन / (सदैव फ्लोट देता है: 7 / 2 = 3.5), फ्लोर विभाजन // (पूर्णांक भाग: 7 // 2 = 3, -7 // 2 = -4), शेषफल %, एवं घातांक (दाईं ओर से सम्बद्ध: 2 3 ** 2 = 512)।
  • श्रृंखलाबद्ध तुलना (Chained Comparisons): ==, !=, >, <, >=, <=। पायथन में 10 < x <= 50 सीधे मान्य है जो (10 < x) and (x <= 50) के समतुल्य है।
  • तार्किक शॉर्ट-सर्किट ऑपरेटर:
    • and: प्रथम असत्य मान मिलने पर उसे ही लौटाता है, अन्यथा अंतिम सत्य मान (उदा. 0 and 8 देता है 0; 4 and 9 देता है 9)।
    • or: प्रथम सत्य मान मिलते ही लौटा देता है (उदा. 7 or 12 देता है 7)।
    • not: बूलियन मान को उलट देता है।
  • पहचान ऑपरेटर (is, is not) बनाम मान समानता (==, !=): == केवल मानों की समानता जांचता है, जबकि is यह जांचता है कि क्या दोनों चर मेमोरी के एक ही पते (id) को इंगित कर रहे हैं।
  • सदस्यता ऑपरेटर (Membership): in तथा not in किसी अनुक्रम में तत्व की उपस्थिति $O(N)$ अथवा सेट में औसत $O(1)$ समय में जांचते हैं।

3. सशर्त शाखा नियंत्रण, पुनरावृत्ति एवं लूप-एल्स लॉजिक

3.1 सशर्त शाखा नियंत्रण: if, elif एवं else

पायथन में शून्य (0, 0.0), None, False एवं कोई भी रिक्त संग्रह ("", [], (), {}, set()) स्वतः असत्य (Falsey) माने जाते हैं। शेष सभी मान सत्य (Truthy) होते हैं।

# बहु-शाखा निर्णय संरचना एवं टर्नरी ऑपरेटर
score = 88

if score >= 90:
    grade = 'AA'
elif score >= 80:
    grade = 'A+'
elif score >= 70:
    grade = 'A'
else:
    grade = 'Pass'

# एकल-पंक्ति टर्नरी अभिव्यक्ति:
result = "Distinction" if score >= 80 else "Regular"
3.2 पुनरावृत्ति संरचनाएं: while एवं for लूप तथा range() की कार्यप्रणाली

पुनरावृत्ति हेतु दो प्रमुख लूप होते हैं:

  • while लूप: स्थिति-नियंत्रित लूप जो शर्त सत्य रहने तक चलता है। लूप चर में वृद्धि/संशोधन न करने पर अनंत लूप (Infinite loop) बन जाता है।
  • for लूप: अनुक्रम-नियंत्रित लूप जो संग्रह के प्रत्येक तत्व पर क्रमशः कार्य करता है।
  • range(start, stop, step) ऑब्जेक्ट: यह मेमोरी में पूरी सूची न बनाकर मांग पर संख्याएं उत्पन्न करता है:
    • range(6): 0 से 5 तक संख्याएं उत्पन्न करता है (अंतिम मान 6 शामिल नहीं)।
    • range(2, 11, 2): 2, 4, 6, 8, 10 देता है।
    • range(10, 0, -2): अवरोही क्रम में 10, 8, 6, 4, 2 देता है।
3.3 जम्प स्टेटमेंट्स एवं लूप-एल्स (Loop-Else) संकल्पना

लूप प्रवाह को नियंत्रित करने हेतु तीन कीवर्ड्स होते हैं:

  • break: लूप को तत्काल समाप्त कर नियंत्रण को लूप के बाहर ले जाता है।
  • continue: वर्तमान पुनरावृत्ति के शेष कोड को छोड़कर अगली पुनरावृत्ति पर चला जाता है।
  • pass: केवल एक सिंटैक्टिक रिक्त स्थान (No-op) के रूप में कार्य करता है।
  • लूप के साथ else खंड: लूप का else खंड केवल तभी निष्पादित होता है जब लूप बिना किसी break के स्वाभाविक रूप से अपनी पुनरावृत्ति पूरी कर ले:
# अभाज्य संख्या परीक्षण में for-else का उपयोग
val = 43
for i in range(2, int(val ** 0.5) + 1):
    if val % i == 0:
        print(f"{val} भाज्य संख्या है।")
        break
else:
    # यह तब चलेगा जब लूप में कोई break न लगा हो
    print(f"{val} एक अभाज्य संख्या है!")
कीवर्ड / निर्देश मूल कार्य एवं व्यवहार लूप प्रवाह पर प्रभाव लूप के else खंड को चलाता है?
break लूप के निष्पादन को बिना शर्त तत्काल रोक देता है। अंतरतम लूप को समाप्त कर नियंत्रण को लूप के बाहर ले जाता है। नहीं (लूप के else खंड को निरस्त करता है)
continue वर्तमान पुनरावृत्ति के शेष भाग को छोड़ देता है। वर्तमान चक्र को छोड़कर तुरंत अगली पुनरावृत्ति जांच पर जाता है। हाँ (यदि लूप स्वाभाविक रूप से पूर्ण हो)
pass सिंटैक्टिक रिक्त स्थान धारक (No-op निर्देश)। कुछ नहीं करता; नियंत्रण क्रमिक रूप से अगली पंक्ति पर बढ़ता है। हाँ (लूप के स्वाभाविक समापन में बाधा नहीं डालता)

4. अनुक्रम डेटा प्रकार: स्ट्रिंग, लिस्ट एवं टपल का विश्लेषण

4.1 अनुक्रम इंडेक्सिंग एवं स्लाइसिंग कैलकुलस

स्ट्रिंग, लिस्ट और टपल में द्विदिशीय इंडेक्सिंग समर्थित होती है:

  • धनात्मक इंडेक्स: प्रथम तत्व 0 से लेकर अंतिम तत्व n - 1 तक।
  • ऋणात्मक इंडेक्स: अंतिम तत्व -1 से लेकर प्रथम तत्व -n तक।
  • स्लाइसिंग सिंटैक्स seq[start:stop:step]: start से लेकर stop से ठीक पहले तक step के अंतराल पर उप-अनुक्रम निकालता है।
    • seq[::-1] लिखने पर संपूर्ण अनुक्रम उलट जाता है।
    • स्लाइसिंग में सीमा पार होने पर भी IndexError नहीं आता।
4.2 स्ट्रिंग्स (str): अपरिवर्तनीयता एवं प्रमुख विधियां

स्ट्रिंग यूनिकोड वर्णों का अपरिवर्तनीय अनुक्रम है। प्रमुख मेथड्स:

  • .upper(), .lower(), .title(), .capitalize(): अक्षरों का आकार बदलना।
  • .strip(), .lstrip(), .rstrip(): रिक्त स्थान या अवांछित वर्ण हटाना।
  • .find(sub): अनुपस्थिति पर -1 देता है; .index(sub): अनुपस्थिति पर ValueError देता है।
  • .split(sep): स्ट्रिंग को तोड़कर लिस्ट बनाता है; sep.join(list): लिस्ट के शब्दों को जोड़कर स्ट्रिंग बनाता है।
  • f-strings: आधुनिक स्ट्रिंग प्रारूपण: f"विद्यार्थी: {name}, अंक: {marks:.1f}"।
4.3 लिस्ट (list): गतिशील सरणियां एवं लिस्ट कॉम्प्रिहेंशन

लिस्ट परिवर्तनीय, विषम तत्वों को धारण करने वाली गतिशील संरचना है।

संक्रिया सिंटैक्स / मेथड कार्यविधि एवं जटिलता
जोड़ना lst.append(x)
lst.extend(it)
lst.insert(i, x)
append अंत में एक तत्व जोड़ता है $O(1)$ में। extend किसी अन्य संग्रह के सभी तत्व जोड़ता है। insert निश्चित इंडेक्स पर तत्व स्थापित करता है $O(N)$ में।
हटाना lst.pop([i])
lst.remove(x)
del lst[i]
pop() तत्व हटाकर लौटाता है (अंतिम तत्व $O(1)$, मध्य तत्व $O(N)$)। remove(x) प्रथम प्राप्त मान x को हटाता है।
लिस्ट कॉम्प्रिहेंशन [expr for x in seq if cond] तीव्र एवं संक्षिप्त लूप अभिव्यक्ति: [x**2 for x in range(6) if x%2==0] बनाता है [0, 4, 16]।
कॉपी के प्रकार उपनाम बनाम शैलो कॉपी बनाम डीप कॉपी b = a (समान मेमोरी)। b = a.copy() (Shallow copy: बाहरी सूची नई, आंतरिक नेस्टेड सूचियां साझा)। copy.deepcopy(a) (संपूर्ण आंतरिक ऑब्जेक्ट्स की स्वतंत्र नकल)।
4.4 टपल (tuple): अपरिवर्तनीय सुरक्षा एवं पैकिंग/अनपैकिंग

टपल कोष्ठक () द्वारा परिबद्ध अपरिवर्तनीय अनुक्रम है। एकल तत्व के टपल में अल्पविराम (Comma) अनिवार्य है: t = (50,) (अन्यथा (50) को सामान्य पूर्णांक 50 माना जाएगा)।

  • पैकिंग एवं अनपैकिंग: मानों को एक साथ बांधना पैकिंग कहलाता है: t = 10, 20। उन्हें अलग-अलग चरों में खोलना अनपैकिंग कहलाता है: a, b = t। मानों को परस्पर बदलने हेतु यह आदर्श है: x, y = y, x।
  • टपल के लाभ: लिस्ट की तुलना में कम मेमोरी और अधिक निष्पादन गति। अपरिवर्तनीय होने के कारण यह डिक्शनरी कीज के रूप में सुरक्षित है।

5. हैश संग्रह: डिक्शनरी एवं गणितीय सेट सिद्धांत

5.1 डिक्शनरी (dict): हैश टेबल एवं कीज (Keys) के नियम

डिक्शनरी एक परिवर्तनीय, कुंजी-मान (Key-Value) जोड़ों का साहचर्य संग्रह है। पायथन 3.7+ में डिक्शनरी प्रविष्टियों के क्रम (Insertion order) को सुरक्षित रखती है।

डिक्शनरी कीज हेतु अनिवार्य नियम:

डिक्शनरी की कुंजी (Key) सदैव अपरिवर्तनीय एवं हैशेबल (Immutable & Hashable) होनी चाहिए (जैसे स्ट्रिंग, संख्या अथवा टपल)। परिवर्तनीय प्रकारों (जैसे लिस्ट या सेट) का कुंजी के रूप में प्रयोग वर्जित है; ऐसा करने पर TypeError: unhashable type उत्पन्न होता है।

प्रमुख डिक्शनरी विधियां:

  • d.get(key, default): कुंजी न होने पर KeyError दिए बिना सुरक्षित रूप से डिफॉल्ट मान लौटाता है।
  • d.setdefault(key, default): कुंजी उपस्थित होने पर उसका मान देता है, अन्यथा नया मान दर्ज कर लौटाता है।
  • d.pop(key, [default]): कुंजी को हटाकर उसका मान लौटाता है।
  • d.update(other): दूसरी डिक्शनरी के जोड़ों से वर्तमान डिक्शनरी को अद्यतन करता है।
  • d.keys(), d.values(), d.items(): गतिशील दृश्य (Views) लौटाते हैं।
  • डिक्शनरी कॉम्प्रिहेंशन: {k: v for k, v in it} जैसे {x: x**3 for x in range(5)}।
5.2 सेट (set) एवं गणितीय सेट बीजगणित

सेट अद्वितीय (Unique) एवं अपरिवर्तनीय तत्वों का परिवर्तनीय एवं अव्यवस्थित (Unordered) संग्रह है। रिक्त सेट बनाने हेतु set() का उपयोग अनिवार्य है (क्योंकि {} रिक्त डिक्शनरी बनाता है)।

सेट संक्रिया ऑपरेटर मेथड गणितीय अर्थ ($A, B$)
यूनियन (सम्मिलन) A | B A.union(B) $A$ एवं $B$ के समस्त अद्वितीय तत्वों का समुच्चय ($A \cup B$)
इंटरसेक्शन (सर्वनिष्ठ) A & B A.intersection(B) दोनों में उभयनिष्ठ तत्व ($A \cap B$)
अंतर (Difference) A - B A.difference(B) $A$ में उपस्थित किंतु $B$ में अनुपस्थित तत्व ($A \setminus B$)
सममित अंतर A ^ B A.symmetric_difference(B) $A$ या $B$ में उपस्थित किंतु दोनों में उभयनिष्ठ न हों

6. मॉड्यूलर फंक्शन्स, LEGB स्कोप, फाइल I/O एवं अपवाद प्रबंधन

6.1 मॉड्युलर फंक्शन्स, आर्गुमेंट्स एवं LEGB स्कोप पदानुक्रम

पायथन में फंक्शन्स प्रथम श्रेणी के नागरिक (First-class citizens) हैं।

  • आर्गुमेंट्स के प्रकार:
    • पोजिशनल आर्गुमेंट्स: दिए गए क्रम अनुसार ग्रहण किए जाते हैं।
    • डिफ़ॉल्ट आर्गुमेंट्स: पूर्व निर्धारित मान रखते हैं (उदा. def calc(rate=0.05):)। नियम: डिफ़ॉल्ट आर्गुमेंट के बाद कोई गैर-डिफ़ॉल्ट आर्गुमेंट नहीं आ सकता।
    • परिवर्तनीय आर्गुमेंट्स: *args अतिरिक्त पोजिशनल मानों को टपल में तथा **kwargs अतिरिक्त कीवर्ड मानों को डिक्शनरी में संचित करता है।
  • LEGB स्कोप नियम: किसी चर को खोजते समय पायथन 4 स्तरों में जांच करता है:
    1. L (Local): वर्तमान फंक्शन के भीतर परिभाषित चर।
    2. E (Enclosing): बाहरी नेस्टेड फंक्शन के चर।
    3. G (Global): मॉड्यूल स्तर पर परिभाषित ग्लोबल चर अथवा global कीवर्ड।
    4. B (Built-in): पायथन के अंतर्निहित नाम (जैसे len, print, range)।
  • global एवं nonlocal कीवर्ड्स: फंक्शन के भीतर से ग्लोबल चर को बदलने हेतु global तथा नेस्टेड फंक्शन में बाहरी चर को बदलने हेतु nonlocal का प्रयोग होता है।
6.2 स्थायी फाइल I/O एवं कॉन्टेक्स्ट मैनेजर (with open)

फाइल ऑपरेशंस हेतु कॉन्टेक्स्ट मैनेजर (with open(...) as f:) सर्वश्रेष्ठ विधि है, जो कार्य पूर्ण होने पर फाइल को स्वतः व सुरक्षित रूप से बंद कर देती है:

फाइल मोड स्ट्रीम प्रकृति पॉइंटर की प्रारंभिक स्थिति फाइल अनुपस्थिति पर व्यवहार
'r' केवल पढ़ने हेतु (Text Read) फाइल के प्रारंभ में (बाइट 0) FileNotFoundError उत्पन्न करता है।
'w' केवल लिखने हेतु (Text Write) फाइल के प्रारंभ में (पूर्व डेटा मिट जाता है) नई फाइल का निर्माण करता है।
'a' अंत में जोड़ने हेतु (Append) फाइल के अंतिम छोर पर (EOF) नई फाइल का निर्माण करता है।
'rb' / 'wb' बाइनरी स्ट्रीम्स (पिकलिंग) बाइट स्तर का ऑफसेट pickle.dump() एवं pickle.load() द्वारा ऑब्जेक्ट क्रमबद्धता।

पॉइंटर नियंत्रण: f.tell() वर्तमान बाइट स्थिति बताता है। f.seek(offset, whence) पॉइंटर को वांछित स्थान पर ले जाता है (whence=0 प्रारंभ से, whence=1 वर्तमान स्थान से, whence=2 अंत से)।

6.3 अपवाद प्रबंधन: try, except, else एवं finally ब्लॉक

रनटाइम त्रुटियों से प्रोग्राम को सुरक्षित रखने हेतु पायथन का 4-स्तरीय अपवाद मॉडल उपयोग किया जाता है:

# संपूर्ण अपवाद प्रबंधन संरचना
try:
    with open("data.txt", "r") as f:
        val = int(f.readline())
        res = 500 / val
except FileNotFoundError:
    print("त्रुटि: अभीष्ट फाइल उपस्थित नहीं है।")
except ZeroDivisionError:
    print("त्रुटि: शून्य से भाग संभव नहीं है।")
except ValueError:
    print("त्रुटि: फाइल में मान्य संख्यात्मक डेटा नहीं है।")
else:
    # केवल तब जब try ब्लॉक में कोई अपवाद न आए
    print(f"सफल गणना परिणाम: {res}")
finally:
    # अपवाद आए या न आए, यह अवश्य चलेगा
    print("संसाधन सफाई कार्य पूर्ण हुआ।")

प्रोग्रामिंग सिंटेक्स, स्टेटमेंट्स एवं भाषा अनुवादक नियम

सोर्स कोड (.py) -> AST -> बाइटकोड (.pyc) -> PVM (ceval.c) -> हार्डवेयर निष्पादन
seq[start : stop : step] | लंबाई = max(0, ceil((stop - start) / step))
म्यूटेबल: {list, dict, set} | इम्यूटेबल: {int, float, complex, bool, str, tuple, frozenset}
Local (L) -> Enclosing (E) -> Global (G) -> Built-in (B)
'r' (पढ़ना), 'w' (मिटाकर लिखना), 'a' (अंत में जोड़ना), 'r+' (पढ़ना व लिखना), 'b' (बाइनरी फ्लैग)
try -> (त्रुटि पर except) | (त्रुटि न होने पर else) -> finally (सदैव निष्पादित)

अवधारणात्मक हल उदाहरण एवं अनुप्रयोग (Solved Examples)

उदाहरण 1
मेमोरी संदर्भ के आधार पर म्यूटेबल एवं इम्यूटेबल डेटा प्रकारों में अंतर स्पष्ट कीजिए। निम्नलिखित कोड के द्वितीय प्रिंट स्टेटमेंट के परिणाम का सकारण विश्लेषण कीजिए: [2 अंक] a = [1, 2, 3] b = a a.append(4) print(b) x = 10 y = x x += 5 print(y)
विस्तृत समाधान / उत्तर:

चरण 1: संकल्पनात्मक अंतर (1 अंक) पायथन में म्यूटेबल (परिवर्तनीय) डेटा प्रकारों (जैसे list, dict, set) के आंतरिक मान को उसी मेमोरी पते (id()) पर सीधे संशोधित किया जा सकता है। इसके विपरीत, इम्यूटेबल (अपरिवर्तनीय) डेटा प्रकारों (जैसे int, float, str, tuple) के आंतरिक मान में परिवर्तन संभव नहीं है; किसी भी परिवर्तन पर हीप मेमोरी में पूर्णतः नया ऑब्जेक्ट बनता है।

चरण 2: कोड का विश्लेषण एवं सटीक कारण (1 अंक)

  1. 'a = [1, 2, 3]': मेमोरी में एक लिस्ट बनती है। 'b = a' करने पर 'b' भी उसी मेमोरी पते को इंगित करता है। लिस्ट म्यूटेबल होने के कारण 'a.append(4)' उसी लिस्ट को [1, 2, 3, 4] में बदल देता है। अतः 'print(b)' का मान [1, 2, 3, 4] होगा।
  2. 'x = 10': मेमोरी में 10 का ऑब्जेक्ट बनता है और 'y = x' से 'y' भी उसी 10 को इंगित करता है। किंतु पूर्णांक इम्यूटेबल होने से 'x += 5' करने पर नया ऑब्जेक्ट 15 बनता है जो 'x' से जुड़ता है, जबकि 'y' पूर्ववत 10 को ही इंगित करता रहता है। अतः 'print(y)' 10 प्रदर्शित करेगा।

अंतिम परिणाम: [1, 2, 3, 4] 10

उदाहरण 2
यदि s = 'WBCHSE_COMPUTER_SCIENCE_2026' हो, तो निम्नलिखित स्लाइसिंग एवं मेथड्स का आउटपुट चरणबद्ध इंडेक्स गणना सहित ज्ञात कीजिए: [3 अंक] (a) s[7:15] (b) s[::-3] (c) s.split('_')[1].lower()
विस्तृत समाधान / उत्तर:

चरणबद्ध समाधान:

(a) s[7:15] का मान: [1 अंक]

  • सूत्र: s[start:stop] इंडेक्स 7 से प्रारंभ कर इंडेक्स 14 तक के वर्ण लेगा (stop इंडेक्स 15 सम्मिलित नहीं होता)।
  • इंडेक्स 7 = 'C', 8 = 'O', 9 = 'M', 10 = 'P', 11 = 'U', 12 = 'T', 13 = 'E', 14 = 'R' ।
  • परिणाम: 'COMPUTER'

(b) s[::-3] का मान: [1 अंक]

  • सूत्र: ऋणात्मक स्टेप (-3) होने से अंतिम वर्ण s[-1] अर्थात् इंडेक्स 28 से 3-3 के अंतराल पर पीछे की ओर वर्ण चुनेगा।
  • चयनित इंडेक्स: 28 ('6'), 25 ('0'), 22 ('E'), 19 ('I'), 16 ('_'), 13 ('E'), 10 ('P'), 7 ('C'), 4 ('S'), 1 ('B')।
  • परिणाम: '60EI_EPCSB'

(c) s.split('_')[1].lower() का मान: [1 अंक]

  • 's.split('_')' अंडरस्कोर पर विभाजित कर लिस्ट बनाता है: ['WBCHSE', 'COMPUTER', 'SCIENCE', '2026']।
  • इंडेक्स [1] का मान 'COMPUTER' है।
  • '.lower()' मेथड इसे लोअरकेस में बदल देता है: 'computer'।
  • परिणाम: 'computer'
उदाहरण 3
पायथन में एक फंक्शन 'char_frequency(text)' लिखिए जो एक स्ट्रिंग इनपुट ले, सभी रिक्त स्थानों और चिह्नों को हटाकर छोटे अक्षरों में बदले और डिक्शनरी का प्रयोग करके प्रत्येक वर्ण की आवृत्ति (Frequency) गिनकर लौटाए। [3 अंक]
विस्तृत समाधान / उत्तर:

प्रामाणिक पायथन कोड:

def char_frequency(text): """ प्रत्येक वर्णमाला की आवृत्ति गिनकर डिक्शनरी के रूप में लौटाता है। """ freq = {} for char in text.lower(): if char.isalpha(): # केवल अक्षरों का चयन # get() मेथड द्वारा O(1) समय में सुरक्षित गणना freq[char] = freq.get(char, 0) + 1 return freq

ड्राइवर कॉल एवं परीक्षण:

sample_input = 'Python Class 12 WBCHSE!' result = char_frequency(sample_input) print(result)

अंक विभाजन (3 अंक):

  • लोअरकेस में बदलना एवं लूप चलाना (1 अंक)।
  • 'char.isalpha()' से रिक्त स्थान एवं अंक/चिह्न छांटना (1 अंक)।
  • डिक्शनरी کے 'get(char, 0) + 1' द्वारा सटीक आवृत्ति गणना (1 अंक)। आउटपुट: {'p': 1, 'y': 1, 't': 1, 'h': 2, 'o': 1, 'n': 1, 'c': 2, 'l': 1, 'a': 1, 's': 3, 'w': 1, 'b': 1, 'e': 1}
उदाहरण 4
(a) नेस्टेड लिस्ट कॉम्प्रिहेंशन का प्रयोग करके एक M x N मैट्रिक्स का ट्रांसपोज़ (पंक्ति और स्तंभ का परस्पर विनिमय) ज्ञात करने का एक-पंक्ति कोड लिखिए। [2 अंक] (b) लिस्ट कॉम्प्रिहेंशन का उपयोग करके 2 से 50 तक की सभी अभाज्य (Prime) संख्याओं की सूची एक पंक्ति में प्राप्त कीजिए। [2 अंक]
विस्तृत समाधान / उत्तर:

भाग (a): मैट्रिक्स ट्रांसपोज़ [2 अंक]

matrix = [ [1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12] ]

एकल-पंक्ति नेस्टेड लिस्ट कॉम्प्रिहेंशन:

transposed = [[row[col] for row in matrix] for col in range(len(matrix[0]))] print(transposed)

आउटपुट: [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]

अंक: बाहरी कॉलम लूप 'range(len(matrix[0]))' (1 अंक); आंतरिक रो निष्कर्षण (1 अंक)।


भाग (b): अभाज्य संख्या कॉम्प्रिहेंशन [2 अंक]

एकल-पंक्ति अभाज्य संख्या कॉम्प्रिहेंशन:

primes = [n for n in range(2, 51) if all(n % d != 0 for d in range(2, int(n**0.5) + 1))] print(primes)

आउटपुट: [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]

अंक: रेंज 2 से 51 (1 अंक); नेस्टेड all() द्वारा विभाज्यता परीक्षण (1 अंक)।

उदाहरण 5
कॉन्टेक्स्ट मैनेजर ('with open') का प्रयोग करके एक सुरक्षित पायथन स्क्रिप्ट लिखिए जो निम्नलिखित कार्य करे: [4 अंक] 1. 'input_log.txt' नामक टेक्स्ट फाइल को पढ़े। 2. कुल पंक्तियों की संख्या, कुल शब्दों की संख्या तथा न्यूलाइन रहित कुल अक्षरों की संख्या की गणना करे। 3. 'ERROR:' से प्रारंभ होने वाली सभी अद्वितीय (Unique) पंक्तियों को पहचानकर प्रिंट करे। 4. 'FileNotFoundError' एवं सामान्य 'IOError' को उपयुक्त संदेश सहित हैंडल करे।
विस्तृत समाधान / उत्तर:

प्रामाणिक पायथन फाइल हैंडलिंग कोड:

def analyze_log_file(filename): total_lines = 0 total_words = 0 total_chars = 0 error_lines = set() # अद्वितीय पंक्तियों हेतु सेट का प्रयोग

try:
    with open(filename, 'r', encoding='utf-8') as f:
        for line in f:
            total_lines += 1
            cleaned = line.rstrip('\r\n')
            total_chars += len(cleaned)
            words = cleaned.split()
            total_words += len(words)
            
            if cleaned.startswith('ERROR:'):
                error_lines.add(cleaned)

    print(f'फाइल नाम: {filename}')
    print(f'कुल पंक्तियां: {total_lines}')
    print(f'कुल शब्द: {total_words}')
    print(f'कुल अक्षर: {total_chars}')
    print(f'प्राप्त अद्वितीय त्रुटियां ({len(error_lines)}):')
    for err in sorted(error_lines):
        print(f'  - {err}')

except FileNotFoundError:
    print(f'त्रुटि: अभीष्ट फाइल "{filename}" मेमोरी में उपलब्ध नहीं है।')
except IOError as e:
    print(f'I/O सिस्टम त्रुटि: {e}')

ड्राइवर कॉल:

analyze_log_file('input_log.txt')

मूल्यांकन रूब्रिक (4 अंक):

  • 'with open' कॉन्टेक्स्ट मैनेजर का प्रयोग (1 अंक)।
  • पंक्तियों, शब्दों एवं अक्षरों की सटीक गणना (1 अंक)।
  • 'startswith('ERROR:')' द्वारा सेट में संचयन (1 अंक)।
  • FileNotFoundError एवं IOError ब्लॉक्स का व्यवस्थित उपयोग (1 अंक)।
उदाहरण 6
एक सांख्यिकीय पायथन फंक्शन 'compute_summary(*data, **options)' विकसित कीजिए जो निम्नलिखित विशिष्टताओं को पूर्ण करे: [5 अंक] 1. '*data' द्वारा अनिश्चित संख्या में संख्यात्मक मान स्वीकार करे। 2. '**options' द्वारा 'precision' (डिफ़ॉल्ट 2) कीवर्ड स्वीकार करे। 3. कोई मान न मिलने पर कस्टम अपवाद 'EmptyDatasetError' उत्पन्न करे। 4. माध्य (mean), प्रसरण (variance) एवं मानक विचलन (standard_deviation) की गणना कर डिक्शनरी के रूप में लौटाए। 5. एक 'try...except...finally' ड्राइवर ब्लॉक के माध्यम से सफल निष्पादन एवं अपवाद नियंत्रण का प्रदर्शन करे।
विस्तृत समाधान / उत्तर:

संपूर्ण एवं सुरक्षित पायथन प्रोग्राम:

चरण 1: कस्टम अपवाद क्लास का निर्माण

class EmptyDatasetError(Exception): """रिक्त डेटासेट हेतु कस्टम अपवाद।""" pass

चरण 2: सांख्यिकीय फंक्शन का क्रियान्वयन

def compute_summary(*data, **options): if not data: raise EmptyDatasetError('डेटासेट रिक्त है! कोई संख्यात्मक मान नहीं मिला।')

for x in data:
    if not isinstance(x, (int, float)):
        raise TypeError(f'अमान्य तत्व: {x}। समस्त मान संख्यात्मक होने चाहिए।')
        
precision = options.get('precision', 2)
n = len(data)
mean_val = sum(data) / n
variance_val = sum((x - mean_val) ** 2 for x in data) / n
std_dev = variance_val ** 0.5

return {
    'count': n,
    'mean': round(mean_val, precision),
    'variance': round(variance_val, precision),
    'standard_deviation': round(std_dev, precision)
}

चरण 3: ड्राइवर ब्लॉक एवं अपवाद परीक्षण

def main(): test_cases = [ (10, 20, 30, 40, 50), (), # EmptyDatasetError ट्रिगर करेगा (15, 'अमान्य', 45) # TypeError ट्रिगर करेगा ]

for idx, tc in enumerate(test_cases, 1):
    print(f'\n--- टेस्ट केस {idx} ---')
    try:
        res = compute_summary(*tc, precision=3)
        print(f'गणना सफल: {res}')
    except EmptyDatasetError as e:
        print(f'[पकड़ा गया अपवाद]: {e}')
    except TypeError as e:
        print(f'[पकड़ा गया अपवाद]: {e}')
    finally:
        print(f'टेस्ट केस {idx} का मूल्यांकन समाप्त हुआ।')

if name == 'main': main()

अंक विभाजन (5 अंक):

  • Exception क्लास से इनहेरिट कर कस्टम क्लास बनाना (1 अंक)।
  • *data एवं **options का सही उपयोग (1 अंक)।
  • रिक्त डेटा पर EmptyDatasetError उठाना (1 अंक)।
  • माध्य, प्रसरण एवं मानक विचलन के सटीक गणितीय सूत्र (1 अंक)।
  • संपूर्ण try...except...finally ड्राइवर ब्लॉक (1 अंक)।

सामान्य गलतियाँ एवं परीक्षक के जाल (Examiner Traps)

सामान्य भ्रम / गलत उत्तर

डिफ़ॉल्ट आर्गुमेंट में म्यूटेबल ऑब्जेक्ट का उपयोग: def add_item(val, target=[])

सही वैज्ञानिक तथ्य

डिफ़ॉल्ट मान के रूप में सदैव 'None' का प्रयोग करें: def add_item(val, target=None): if target is None: target = []

सामान्य भ्रम / गलत उत्तर

मान समानता ('==') एवं मेमोरी पहचान ('is') में भ्रम

सही वैज्ञानिक तथ्य

मान तुलना हेतु सदैव '==' का प्रयोग करें। केवल None की जांच हेतु 'if var is None:' का प्रयोग करें।

सामान्य भ्रम / गलत उत्तर

for लूप द्वारा इटरेशन के दौरान उसी लिस्ट के तत्वों को डिलीट करना

सही वैज्ञानिक तथ्य

लिस्ट की शैलो कॉपी पर लूप चलाएं: 'for x in my_list[:]:' अथवा लिस्ट कॉम्प्रिहेंशन से नई छंटी हुई लिस्ट बनाएं।

सामान्य भ्रम / गलत उत्तर

range() एवं स्लाइसिंग में ऑफ-बाय-वन (Off-by-one) सीमा त्रुटि

सही वैज्ञानिक तथ्य

संख्या N तक चलने हेतु स्टॉप को N + 1 निर्धारित करें: 'range(1, 11)' 1 से 10 तक संख्याएं देता है।

सामान्य भ्रम / गलत उत्तर

एक बार read() करने के पश्चात पुनः फाइल पढ़ने का प्रयास करना

सही वैज्ञानिक तथ्य

पुनः पढ़ने से पूर्व 'file.seek(0)' द्वारा पॉइंटर को फाइल के प्रारंभ में लाएं।

चित्रात्मक व्याख्या एवं मॉडल

पायथन में प्रोग्रामिंग : आर्किटेक्चर एवं निष्पादन पाइपलाइन WBCHSE कक्षा 12 कंप्यूटर साइंस (अध्याय 1) — आंतरिक निष्पादन एवं मेमोरी मॉडल WBCHSE CS • CH 1 चरण 1: CPython संकलन एवं PVM निष्पादन सोर्स कोड से बाइटकोड एवं वर्चुअल मशीन • सोर्स कोड (.py) -> CPython कंपाइलर -> AST निर्माण • बाइटकोड (.pyc) निर्माण जो pycache में संग्रहित होता है • पायथन वर्चुअल मशीन (PVM) स्टैक-आधारित इंटरप्रेटर इंजन • क्रॉस-प्लेटफ़ॉर्म स्वतंत्रता: कोड पोर्टेबिलिटी की गारंटी Q1 चरण 2: डायनामिक टाइपिंग एवं ऑब्जेक्ट मेमोरी मॉडल परिवर्तनीयता, संदर्भ गणना एवं मेमोरी प्रबंधन • प्रत्येक वेरिएबल केवल ऑब्जेक्ट का संदर्भ (Reference) होता है • परिवर्तनीय (Mutable): list, dict, set — इन-प्लेस संशोधन • अपरिवर्तनीय (Immutable): int, float, str, tuple — सुरक्षित • id() व type() फंक्शन्स; '==' मान तुलना बनाम 'is' पहचान Q2 पायथन अभिकलन इंजन: व्याख्यायित • गतिशील • ऑब्जेक्ट-उन्मुख BYTECODE (.pyc) • PVM ENGINE • DYNAMIC TYPING • LEGB SCOPE • RESILIENT I/O चरण 3: अनुक्रम एवं हैश डेटा संरचनाएं लिस्ट, टपल, डिक्शनरी एवं सेट कॉम्प्रिहेंशन • स्ट्रिंग व लिस्ट स्लाइसिंग सिंटैक्स: s[start:stop:step] • टपल पैकिंग-अनपैकिंग; डिक्शनरी कीज हेतु हैश योग्यता नियम • लिस्ट एवं डिक्शनरी कॉम्प्रिहेंशन: तीव्र एवं संक्षिप्त कोड • सेट सिद्धांत: यूनियन, प्रतिच्छेदन एवं अंतर संक्रियाएं Q3 चरण 4: मॉड्युलर फंक्शन्स, फाइल I/O एवं अपवाद प्रबंधन LEGB स्कोप, कॉन्टेक्स्ट मैनेजर एवं ट्राई-एक्सेप्ट • आर्गुमेंट प्रकार: पोजिशनल, कीवर्ड, डिफॉल्ट, *args एवं **kwargs • नेमस्पेस नियम: Local -> Enclosing -> Global -> Built-in (LEGB) • 'with open(...) as f:' — स्वचालित स्ट्रीम प्रबंधन व सुरक्षित क्लोजिंग • ट्राई-एक्सेप्ट-एल्स-फाइनली (try-except-else-finally) अपवाद तंत्र Q4

स्व-मूल्यांकन अभ्यास (Check Your Understanding)

मूल वैचारिक स्पष्टता की जांच के लिए नैदानिक प्रश्न। पहले स्वयं हल करें, फिर उत्तर देखें।

1
निम्नलिखित कोड का आउटपुट क्या होगा और क्यों स्पष्ट कीजिए: def add_val(x, l=[]): l.append(x) return l print(add_val(10)) print(add_val(20, [])) print(add_val(30))
उत्तर एवं व्याख्या देखें
उत्तर: आउटपुट: [10] [20] [10, 30] व्याख्या: प्रथम कॉल में डिफ़ॉल्ट लिस्ट में 10 जुड़कर [10] बनता है। द्वितीय कॉल में नई स्पष्ट रिक्त लिस्ट [] भेजने से डिफ़ॉल्ट लिस्ट अप्रभावित रहती है और [20] लौटता है। तृतीय कॉल में पुनः वही डिफ़ॉल्ट लिस्ट प्रयुक्त होती है जिसमें पहले से [10] था, अतः 30 जुड़कर [10, 30] बनता है।
डिफ़ॉल्ट आर्गुमेंट फंक्शन परिभाषा के समय केवल एक बार मेमोरी में निर्मित होता है।
2
पायथन में शैलो कॉपी (Shallow copy) एवं डीप कॉपी (Deep copy) में क्या अंतर है? नेस्टेड लिस्ट के उदाहरण सहित समझाइए।
उत्तर एवं व्याख्या देखें
उत्तर: शैलो कॉपी (b = a.copy()) केवल बाहरी संग्रह की नई मेमोरी बनाती है, किंतु आंतरिक ऑब्जेक्ट्स के संदर्भ पुराने ही रहते हैं। डीप कॉपी (copy.deepcopy(a)) आंतरिक ऑब्जेक्ट्स की भी पुनरावृत्त रूप से स्वतंत्र नकल बनाती है। उदाहरण: a = [[10]]; b = a.copy(); b[0].append(20); print(a) करने पर [[10, 20]] मिलेगा क्योंकि दोनों आंतरिक लिस्ट साझा करते हैं।
नेस्टेड लिस्ट a = [[1, 2], [3, 4]] पर विचार कीजिए। आंतरिक सूची में संशोधन का क्या प्रभाव पड़ेगा?
3
पायथन में (20,) एक टपल है, किंतु (20) एक पूर्णांक क्यों माना जाता है?
उत्तर एवं व्याख्या देखें
उत्तर: पायथन में कोष्ठक का उपयोग अंकगणितीय समूहन हेतु भी होता है (जैसे (2 + 3) * 4)। अतः भ्रम निवारण हेतु एकल तत्व के टपल में अल्पविराम (Comma) अनिवार्य है: (20,) टपल बनता है, जबकि (20) सामान्य पूर्णांक 20 के रूप में मूल्यांकित होता है।
पायथन में कोष्ठक अंकगणितीय प्राथमिकताओं के समूहन हेतु भी प्रयुक्त होते हैं।
4
डिक्शनरी कॉम्प्रिहेंशन का प्रयोग करके 'd = {"a": 1, "b": 2, "c": 3}' की कुंजियों एवं मानों को परस्पर बदलने (Invert) का कोड लिखिए।
उत्तर एवं व्याख्या देखें
उत्तर: inverted = {v: k for k, v in d.items()} परिणाम: {1: 'a', 2: 'b', 3: 'c'} (शर्त: मूल डिक्शनरी के समस्त मान अद्वितीय एवं हैशेबल होने चाहिए)।
d.items() पर लूप चलाकर मान को कुंजी एवं कुंजी को मान बनाइए।
5
अपवाद प्रबंधन में 'finally' ब्लॉक का मुख्य उद्देश्य क्या है? क्या try ब्लॉक में 'return' होने पर भी finally चलेगा?
उत्तर एवं व्याख्या देखें
उत्तर: 'finally' ब्लॉक का उद्देश्य फाइल, नेटवर्क अथवा डाटाबेस कनेक्शन जैसे बाह्य संसाधनों को हर परिस्थिति में बंद करना है। हां, यदि try अथवा except ब्लॉक में 'return' स्टेटमेंट भी आ जाए, तब भी फंक्शन से बाहर निकलने से ठीक पहले finally ब्लॉक अनिवार्य रूप से निष्पादित होगा।
सिस्टम संसाधनों को सुरक्षित रूप से बंद करने पर विचार कीजिए।
अध्याय का अध्ययन पूर्ण हुआ?
अभ्यास के लिए तैयार?

ऑनलाइन CBT टेस्ट देकर तैयारी का मूल्यांकन करें

WBB परीक्षा पैटर्न पर आधारित बहुविकल्पीय प्रश्नों का ऑनलाइन टेस्ट दें। तुरंत परिणाम, समय विश्लेषण और प्रत्येक प्रश्न का विस्तृत हल प्राप्त करें।

STAY UPDATED

Get the Latest Updates

New test series, syllabus updates, exam notifications and more.

Syllabus
Updates
Exam
Alerts
Study
Resources