Visual walkthrough — Default parameters, keyword arguments
1.2.28 · D2· Coding › Introduction to Programming (Python) › Default parameters, keyword arguments
Step 1 — Ek function khaali boxes ki ek row hai
KYA HAI. Jab aap def greet(name, greeting): likhte ho, Python do labelled boxes reserve karta hai — ek name naam ka, ek greeting naam ka. Yeh names parameters hain: definition mein boxes ke upar ke labels.
YAH SE KYU SHURU KARO. Baad ke har rule ("defaults right mein jaate hain", "positionals pehle aate hain") asliyat mein ek rule hai ki boxes kaise fill hote hain. Agar aap boxes picture karo, toh rules arbitrary lagte hi band ho jaate hain.
PICTURE. Do khaali boxes wait kar rahe hain. Unme abhi kuch nahi hai — ek bare definition kuch fill nahi karta.

Step 2 — Positional filling: values left to right girti hain
KYA HAI. greet("Asha", "Hi") call karo. Python arguments ko boxes mein order mein daalta hai: pehli value pehle box mein, doosri doosre mein.
Code ke neeche har label kehta hai ki woh value kis box mein jaati hai. Position — aur kuch nahi — decide karta hai.
KYU. Yahi woh default behaviour hai jo Python pehle try karta hai. Yeh fast hai aur kisi naam ki zaroorat nahi, lekin iska ek weakness hai jo hum Step 4 mein expose karenge.
PICTURE. Do arrows, pehli value box 1 mein, doosri box 2 mein, strictly order ke hisaab se.

Step 3 — Ek default ek value hai jo box ke andar pre-printed hai
KYA HAI. Ab def greet(name, greeting="Hello"): likho. Doosra box "Hello" ke saath already printed inside aata hai. Yeh printed value default hai.
name—=ke left ka term box ka label hai."Hello"—=ke right ki value woh hai jo box mein baith jaati hai agar caller kuch nahi daale.
KYU. Yahi defaults ka pura point hai (DRY idea): common value ek jagah rehti hai. Jo callers "Hello" se khush hain woh kuch nahi bolte; sirf unusual caller hi isse overwrite karta hai.
PICTURE. Box 1 khaali aur required; box 2 mein pehle se ek faint "Hello" dikh raha hai jis par ek real argument paint kar sakta hai.

Step 4 — Position akela kyun fail hota hai, aur keywords kaise bachate hain
KYA HAI. Ek function ko teen boxes do: def box(width, height, x=0, y=0):. Call box(2, 5, 0, 1) padho. Kaun sa number kaunsa hai? Position aapko ek invisible order yaad rakhne par majboor karta hai.
Ek keyword argument yeh fix karta hai: aap box ka naam bol ke dete ho — x=0 matlab "0 ko x label wale box mein daalo, chahe woh kahaan bhi ho."
Kyunki har value apna label carry karti hai, order ka koi matlab nahi rehta: box(height=5, width=2) exact same boxes fill karta hai.
YEH TOOL KYU AUR KOI KYU NAHI. Position compact hai lekin fragile — ek value slip ho gayi toh har baad ki value silently galat box mein chali jaayegi. Naming kuch keystrokes trade karta hai aisi calls ke liye jo self-documenting aur order-independent hoti hain. Yahi keyword arguments ka poora justification hai.
PICTURE. Left: chaar bare numbers, boxes ke upar question marks. Right: wahi call names ke saath likhi, har arrow apne named box par certainty ke saath land karti.

Step 5 — Skip trick: paas waale boxes ko touch kiye bina door waale box tak pahunchna
KYA HAI. def power(base, exp=2, mod=None): ke saath, maano aap mod set karna chahte ho lekin exp ko uske default 2 par rehne dena chahte ho. Positionally impossible hai — 3rd box tak position se pahunchne ke liye pehle 2nd mein kuch daalna padega. Keyword bachao:
5— positional,basemein land karta hai.mod=7— named,expke upar se koodta hai, isliyeexpapna printed default2rakhta hai.
Result: , phir .
KYU. Yahi defaults + keywords ka roz ka faayda hai: sirf woh ek knob badlo jo aapko chahiye aur baaki har box ko apni factory value rakhne do.
PICTURE. Teen boxes; base par ek arrow, ek curved arrow exp ke upar se koodke mod par land karti hai, exp abhi bhi apna default 2 glow kar raha hai.

Step 6 — Do iron rules, box logic mein dekhe gaye
KYA HAI. Do rules, dono obvious hain jab aap boxes dekhte ho.
Rule 1 KYU. Python position se left to right fill karta hai. Agar ek pre-filled box kisi empty required box se pehle hota, toh ek single positional value ambiguous ho jaati — kya woh default ko overwrite kar rahi hai, ya uske peechhe wale required box ke liye hai? Us ordering ko ban karne se ambiguity khatam ho jaati hai.
Rule 2 KYU. Jis moment aap c=9 likhte ho, Python positions count karna band kar deta hai. Baad ka bare 2 ab kisi known slot mein fit nahi hota. Isliye har position-based value pehle resolve honi chahiye.
PICTURE. Top row: ek legal definition (khaale boxes phir pre-filled boxes) green check ke saath; ek tooti hui definition red cross ke saath jahan ek bare value nahi bata sakti ki woh kis box ki hai.

Step 7 — Degenerate case: jab default ek mutable box-filler ho
KYA HAI. Yeh subtle wala hai. Default box mein jo value print hoti hai woh ek baar create hoti hai, us waqt jab def line run hoti hai — har call par fresh nahi. Agar woh value ek list hai (ek mutable object, jise aap in place change kar sakte ho), toh har woh call jo argument omit karta hai woh same list share karta hai.
def add(item, bag=[]): # yeh [] ONCE bana hai, def time pe
bag.append(item)
return bag
add(1) # [1]
add(2) # [1, 2] <- same list, abhi bhi purana item hold kar raha hai!YEH KYU HOTA HAI. Printed default ek single object hai. append us ek object ko mutate karta hai, isliye "leftovers" agli call mein bhi rehte hain. Yahi wajah hai ki yeh concept sirf mutable defaults ke saath problem karta hai — ek number ya string in place mutate nahi ho sakta, isliye woh kabhi leak nahi hota.
PICTURE. Ek list object definition ke time ek baar draw kiya gaya; teen alag calls sab ek hi same box par arrows point kar rahi hain, har append pichle ke upar pile on karta hua.

Ek picture summary
Upar ka sab kuch ek flow mein collapse hota hai: arguments aate hain, boxes position se fill hote hain, phir name se, defaults gaps cover karte hain — aur beware the shared mutable box.

Recall Feynman: puri walkthrough seedhi zabaan mein batao
Ek function labelled boxes ki ek row hai. Jab aap use call karte ho, aapki values boxes mein left to right girti hain — yeh hai positional. Kuch boxes mein pehle se ek value print hoti hai (ek default), isliye agar aap wahan kuch nahi daalte, toh printed value wahi rehti hai. Jab bohot saare boxes ho, order yaad rakhna risky hai, isliye aap har value ka box naam bol ke de sakte ho — keyword arguments — aur ab order ka koi matlab nahi rehta, aur aap ek paas waale box ko skip karke door waale ko fill kar sakte ho jabke paas wala apni factory setting par rehta hai. Do rules isse unambiguous rakhte hain: definition mein, khaale required boxes pre-filled ones se pehle jaate hain; call mein, saare order-based values kisi bhi named ones se pehle aate hain. Aur ek trap: printed default ek baar stamp hota hai, isliye agar woh ek list hai jisme aap keep adding karte ho, toh sablog same list share karte hain — ise fix karo None print karke aur andar ek fresh list banake.
Active recall
Jab aap bina names ke call karo toh arguments kahan land karte hain?
def line mein greeting="Hello" kya karta hai?
"Hello" se pre-fill karta hai jab tak caller ise overwrite na kare.Ek door waale box ko set karte hue paas waale default ko kaise rakhte ho?
power(5, mod=7) — keyword exp ke upar se kood jaata hai.Call mein positional arguments keyword ones se pehle kyun aane chahiye?
Default value kab create hoti hai?
Mutable-default bug sirf lists/dicts ko kyun lagta hai?
Connections
- Parent topic
- Functions - def and return
- Variable scope - local vs global
- *args and **kwargs (variadic functions)
- Mutable vs immutable objects
- DRY principle - Don't Repeat Yourself