1.2.31 · D1 · HinglishIntroduction to Programming (Python)

Foundationsglobal and nonlocal keywords

1,897 words9 min read↑ Read in English

1.2.31 · D1 · Coding › Introduction to Programming (Python) › global and nonlocal keywords

Parent note ki ek bhi line pe trust karne se pehle, tumhe aath chhote ideas ki zaroorat hai jo bilkul scratch se bane hain. Hum ek ek karke chalenge: plain words → picture → topic ko iska kyu zaroorat hai. Koi bhi cheez define hone se pehle nahi aayegi.


1. Ek variable — ek labelled box

Picture: ek box pe sticky label socho. Label hai count, andar ki cheez hai 0.

Figure — global and nonlocal keywords

Topic ko iska kyu zaroorat hai: poora parent note is baat ke baare mein hai ki jab alag alag jagahon pe ek hi label wale kai boxes hote hain to ek name kis box ki taraf point karta hai. Agar tum box-and-label picture nahi sochte, to "rebinding" aur "scope" ka koi matlab nahi banta.


2. Reading vs assigning — do alag actions

Yeh poore page ka sabse important distinction hai.

Picture: reading = box mein jhankna. Assigning = label ko ukhad ke ek alag box pe chipkana.

Figure — global and nonlocal keywords

Topic ko iska kyu zaroorat hai: parent ka core rule yeh hai ki "assigning se name local ho jaata hai, reading se nahi hota." In dono actions ko alag kiye bina yeh rule bekar hai.


3. Scope — woh room jisme ek name rehta hai

Picture: rooms ke andar rooms. Poori file front hall hai (module). Har function jisme tum enter karte ho woh ek chhota room hai jo iske andar bana hua hai.

Figure — global and nonlocal keywords

Topic ko iska kyu zaroorat hai: global aur nonlocal instructions hain kis room mein ek label belong karta hai iske baare mein. Rooms nahi → in keywords ke point karne ke liye kuch nahi. Poori treatment ke liye Scope and LEGB rule dekho.


4. Ek function — ek room jisme tum enter aur leave kar sakte ho

Picture: upar ke figure mein beech wala room. Tum andar jaate ho, sirf woh labels ke saath kaam karte ho jo woh room dekh sakta hai, aur bahar aa jaate ho.

Topic ko iska kyu zaroorat hai: locality per function define hoti hai. "Yeh name local hai" ka matlab hamesha hota hai "is function ke room ke liye local." Prerequisite: Functions in Python.


5. Module level — front hall (Ground floor)

Picture: rooms figure mein sabse bahari box — woh jis par module / front hall likha hai.

Topic ko iska kyu zaroorat hai: global x ka matlab bilkul yeh hai "woh label x use karo jo yahin, front hall mein rehta hai." Parent page par mnemonic G = Ground floor yahi room hai.


6. Nested function aur enclosing scope — ek room ke andar ek room

Picture: ek chhota room beech wale room ke andar bana hua. Inner room bahar beech wale room mein (uska enclosing scope) aur usse aage front hall mein dekh sakta hai.

Figure — global and nonlocal keywords

Topic ko iska kyu zaroorat hai: nonlocal is room ko target karta hai — enclosing function, na ki front hall. Mnemonic N = Next door yahi beech wala room hai. Yahi machinery Closures ke peeche bhi hai.


7. LEGB ladder — jab reading hoti hai tab Python jo order mein search karta hai

Picture: nested boxes ke bahar ki taraf chadna — apne room (L) se shuru karo, enclosing function (E) ki taraf niklo, phir module front hall (G), phir Python ke khud ke supplied names jaise print (B).

Topic ko iska kyu zaroorat hai: reading automatically is ladder ka use karti hai (isliye print(count) bina kisi keyword ke kaam karta hai). Assigning ladder nahi chadhti — woh Local mein rehti hai jab tak tum global/nonlocal se override nahi karte. LEGB samajhna hi woh asymmetry ko click karata hai.


8. Kisi name ko rebind karna vs object ko mutate karna

Ek subtle trap jiske baare mein parent page warn karta hai — apni khud ki picture ki zaroorat hai.

Picture: rebinding = label ek naye box par kood jaata hai. Mutating = wahi box mein ek naya item daala jaata hai; label kabhi nahi move hota.

Topic ko iska kyu zaroorat hai: global ke aas paas ki aadhi confusion inhe mix karne se aati hai. Mutable vs Immutable objects dekho.


9. UnboundLocalError — woh symptom jo yeh sab explain karta hai

Picture: tumne local box tak haath badhaya, par woh khali hai — tumne use fill karne se pehle read karne ki koshish ki, aur Python bahar jhaankne se mana karta hai kyunki assigning ne use local bana diya. Poori detail: UnboundLocalError.

Topic ko iska kyu zaroorat hai: yeh woh "yeh crash kyu hua?" classic hai jisse parent shuru karta hai — yeh assignment rule ka ek seedha nateeja hai, koi random bug nahi.


Prerequisite map

Variable = name on a box

Reading vs Assigning

Scope = a room of names

Function = a room you enter

Module level = front hall

Nested function = room in a room

LEGB reading ladder

Rebind vs mutate object

UnboundLocalError

global and nonlocal keywords


Equipment checklist

Khud ko test karo — sirf tab reveal karo jab tum awaaz mein jawab de chuke ho.

Box-and-label terms mein count = 0 kya create karta hai?
Ek box jisme 0 hai aur label count us par chipka hua hai.
Kaun sa ek symbol batata hai ki koi action assigning hai na ki reading?
= jisme name uske left mein ho (saath hi +=, -=, etc.).
Kya print(count) count ko read karta hai ya assign karta hai?
Yeh read karta hai — koi = nahi, name sirf dekha ja raha hai.
Ek scope kya hota hai?
Ek region (ek "room") jiska apna name labels ka set hota hai; har function call ek fresh scope paata hai.
File ke top pe (kisi function ke bahar) define kiye gaye names kahan rehte hain?
Module / global scope mein — "front hall" mein.
Ek enclosing scope kya hota hai?
Outer function ka room, jab ek function doosre function ke andar define hota hai.
LEGB spell out karo aur batao yeh kya control karta hai.
Local, Enclosing, Global, Built-in — woh order jisme Python kisi name ko read karte waqt search karta hai.
Kya kisi outer name ko read karna LEGB ladder automatically chadhta hai?
Haan — reading ko koi keyword nahi chahiye; sirf assigning by default local rehti hai.
Kisi name ko rebind karne aur kisi object ko mutate karne mein kya fark hai?
Rebinding label ko ek nai value par move karta hai (x = ...); mutating contents ko in-place change karta hai (x.append(...)) bina label ko move kiye.
Kya ek global list par mylist.append(5) ko global chahiye?
Nahi — yeh object ko mutate karta hai, name ko rebind nahi karta.
UnboundLocalError kise kehte hain?
Kisi aisa name read karna jo local hai (kyunki function mein kahin assign hota hai) aur jise abhi koi value nahi di gayi.
global kis level par bind karta hai, nonlocal kis par?
global → module (front hall); nonlocal → nearest enclosing function (next-door room).